2017-02-19 84 views
2

显然,这是可能有有序地图和套boost::variant,像这样:boost :: variant树状容器 - 有没有什么缺点?

typedef boost::variant<std::string, int, bool> key_type; 
std::map<key_type, size_t> m; 

m.insert(std::make_pair(std::string("a"), 3)); 
m.insert(std::make_pair(1, 7)); 
auto x = m.find(1); 
std::cout << x->first << " " << x->second << "\n"; 
x = m.find(std::string("a")); 
std::cout << x->first << " " << x->second << "\n"; 

输出:

1 7 
a 3 

不过,我觉得有点可疑的;我查看了源代码,看看它是如何工作的,但是没有得到太多的结果...不知怎的,不同的类型必须与operator<进行比较......这需要为任何两种类型定义;除此之外,与<比较不同类型本身对我来说是没有意义的。因此,我想知道是否有在性能方面使用地图或套boost::variant。有没有抓住?或者可以使用地图或套件boost::variant

回答

2

我终于找到它的文档中:http://www.boost.org/doc/libs/1_63_0/doc/html/variant/reference.html

指定为模板参数变异每种类型必须至少满足上述要求。此外,变异的某些功能仅当它的界类型满足这些下面的附加概念的要求提供:

...

小于关系:变异是自身小于关系当且仅当每一个其有界类型符合概念的要求。

因为stringintboolLessThanComparable那么在这种情况下,代码是安全的和正确的。