C ++:当所有条目保证唯一时,替代std :: map

时间:2018-10-23 15:14:31

标签: c++ std

我有一个简单的用例:解析标头。我必须解析很多这些标头,并且保证有一个标头不重复任何字段。

在解析这些标头时,我将它们组织在std::map

// pseudo code
std::map<std::string,std::string> x;
x[key] = value;

// etc. 

我已经简化了代码,最慢的一点是这些标头的地图插入。具体来说,是在将项目插入地图时调用的std::_Rb_tree_iterator内部方法。使用gprof进行基准测试表明,在读入这些标头时(仅在中调用此方法(而在可能从地图中插入或删除项目的任何其他操作中未调用)时,调用此方法大约需要大约。我的运行时间的50%。


问题在于:假设我可以保证地图上所有条目的唯一性,是否有办法禁用std::_Rb_tree_iterator来简化地图插入?

我宁愿运行慢速代码,也不愿使用std::map以外的东西,除非替换具有等效的api(即,迭代器产生std::pair<std::string,std::string>)。

1 个答案:

答案 0 :(得分:5)

std::map的插入速度很慢,因为它试图平衡二进制搜索树。使用std::unordered_map使用哈希表;虽然它不会使元素保持排序,但是插入元素会快很多,因此强烈建议您不需要对元素进行排序。

此外,尝试使用insert调用进行插入; []将首先创建一个空元素,然后在其上编写您自己的元素。