在c ++中加速map <string,int> .find()的最快方法.键是按字母顺序排列的

Man*_*Man 5 c++ map

我有一张约100,000对的地图.有没有什么方法可以在使用find()时加快搜索速度,因为键是按字母顺序排列的.我该怎么做呢.我知道您可以在创建地图时指定新的比较器.但是这会加速find()函数吗?

提前致谢.

[解决]感谢一群人我决定使用矢量并使用较低和上限来"剪切"一些搜索.

另外我是新来的,有没有办法将这个问题标记为已回答,或者选择最佳答案?

Jer*_*fin 11

一个不同的比较器只会加速查找,如果它设法更快地进行比较(对于字符串通常会非常困难).

如果您基本上按顺序插入所有数据,然后进行搜索,则使用std::vectorwith std::lower_bound或更快可能会更快std::upper_bound.

如果您并不真正关心订购,并且只想尽快找到数据,您可能会发现这std::unordered_map对您更有效.

编辑:仅供记录:您可能"找到"或"可能找到"这些东西的方式通常是通过分析.根据情况,它可能足够快,即使在简单的测试中也很明显,因此分析不是必需的,但如果有(很多)怀疑,或者你想量化效果,分析器可能是正确的方法去做吧.

  • 关于排序的`std :: vector <>`,另见[Boost.Container](http://www.boost.org/libs/container/)的[`boost :: container :: flat_map <>`] (http://www.boost.org/doc/html/container/non_standard_containers.html#container.non_standard_containers.flat_xxx)用于预先编写的预测试实现. (6认同)