我希望将vector<string>
和boost::unordered_map<string, size_t>
映射字符串替换为前者中带有boost::bimap
的索引。
我应该使用bimap
的什么实例?到目前为止,我已经提出了
typedef bimap<
unordered_set_of<size_t>,
vector_of<string>
> StringMap;
但我不确定我现在是否已经改变了收藏类型。另外,我想知道是否应该更改collection of relations type。 vector_of_relation
会成为我的最佳选择,还是set_of_relation
,或者只是默认选择?
答案 0 :(得分:4)
要获得size_t和std :: string之间的bimap,你有〜常量(最多为散列和任何潜在冲突的成本),你需要使用unordered_set_of:
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <string>
#include <iostream>
#include <typeinfo>
int main(int argc, char* argv[]) {
typedef boost::bimap< boost::bimaps::unordered_set_of<size_t>, boost::bimaps::unordered_set_of<std::string> > StringMap;
StringMap map;
map.insert(StringMap::value_type(1,std::string("Cheese")));
map.insert(StringMap::value_type(2,std::string("Cheese2")));
typedef StringMap::left_map::const_iterator const_iter_type;
const const_iter_type end = map.left.end();
for ( const_iter_type iter = map.left.begin(); iter != end; iter++ ) {
std::cout << iter->first << " " << map.left.at(iter->first) << "\n";
}
}
返回:
1 Cheese
2 Cheese2
unordered_set是set的boost版本,它使用哈希表而不是树来存储元素,请参阅Boost Unordered docs。
查看Bimap example上某个bimap示例的评论,我们有:
左侧地图视图的作用类似于std :: unordered_map&lt; std :: string,long&gt;, 鉴于国家的名称,我们可以用它来定期搜索人口