我有一张包含大约 100,000 对的 map 。有什么方法可以在使用 find() 时加快搜索速度,因为键是按字母顺序排列的。另外我应该怎么做。我知道您可以在创建 map 时指定一个新的比较器。但这会加速 find() 函数吗?
提前致谢。
[已解决] 感谢一群人,我决定使用 vector 并使用下界和上界来“剪断”一些搜索。
我也是新来的,有什么方法可以将这个问题标记为已回答,或者选择一个最佳答案吗?
最佳答案
不同的比较器只有在设法更快地进行比较时才会加快查找速度(这对于字符串通常非常困难)。
如果您基本上是按顺序插入所有数据,然后进行搜索,则使用 std::vector
和 std::lower_bound
可能会更快或 std::upper_bound
。
如果您真的不关心排序,只想尽快找到数据,您可能会发现 std::unordered_map
更适合您。
编辑:仅作记录:您“可能找到”或“可能发现”这些东西的方式通常是通过分析。根据情况,它可能足够快,即使在简单的测试中也很明显,所以分析并不是真正必要的,但如果有(很多)疑问,或者你想量化效果,分析器可能是正确的方法去做。
关于c++ - 在 c++ 中加速 map<string,int> .find() 的最快方法。按键按字母顺序排列的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316228/