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

标签 c++ map

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

提前致谢。

[已解决] 感谢一群人,我决定使用 vector 并使用下界和上界来“剪断”一些搜索。

我也是新来的,有什么方法可以将这个问题标记为已回答,或者选择一个最佳答案吗?

最佳答案

不同的比较器只有在设法更快地进行比较时才会加快查找速度(这对于字符串通常非常困难)。

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

如果您真的不关心排序,只想尽快找到数据,您可能会发现 std::unordered_map 更适合您。

编辑:仅作记录:您“可能找到”或“可能发现”这些东西的方式通常是通过分析。根据情况,它可能足够快,即使在简单的测试中也很明显,所以分析并不是真正必要的,但如果有(很多)疑问,或者你想量化效果,分析器可能是正确的方法去做。

关于c++ - 在 c++ 中加速 map<string,int> .find() 的最快方法。按键按字母顺序排列的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316228/

相关文章:

c++ - 为什么此代码使用带字符串的映射 (C++) 会出现运行时错误?

java - TreeMap put() 静默删除其他条目?

c++ - 如何从一个 map 键列表中减去另一个 map 键列表并获得新 map ( map A - mab B = map C)

c++ - Tensorflow C++ 不使用 GPU

c++ - 为什么要在 PE 文件中创建不同的代码/数据/bss 部分?

c++ - Qt - 从 QTextBrowser 检索文本

java - 如何在 Java 中复制此 C++ 枚举开关?

c++ - 使用boost::bind将 map 作为参数传递

data-structures - Haskell Range map 库

java - Jace::虚拟机关机错误