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

don*_*lan 3 c++ std

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

当我解析这些标题时,我将它们组织成一个std::map,

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

// etc. 
Run Code Online (Sandbox Code Playgroud)

我简化了我的代码,单个最慢的点就是这些标题的地图插入.具体来说,std::_Rb_tree_iterator在将项目插入地图时调用的内部方法.使用gprof进行基准测试表明,这种单一方法在读取这些标题期间调用(而不是在可能从地图中插入或删除项目的任何其他操作期间).50%的运行时间.


问题相当于:假设我可以保证地图中所有条目的唯一性,有没有办法让我禁用std::_Rb_tree_iterator简化的地图插入?

我宁愿运行慢代码而不是使用其他代码std::map,除非替换具有等效的api(即,迭代器产生a std::pair<std::string,std::string>).

小智 5

std::map插入很慢,因为它试图平衡二叉搜索树.使用std::unordered_map使用一个哈希表; 虽然它不会保持元素排序,但插入元素会快很多,如果你不需要排序元素,强烈建议使用它.

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