一对数组而不是 STL 映射 - 可能吗?优缺点都有什么?

Har*_* Sj 4 c++ arrays stdmap c++-standard-library data-structures

为什么 c++ 标准映射非常有名,而成对数组也与那些相似?

什么时候使用 C++ 标准映射更好,什么时候使用成对数组?或者两者的应用程序相似?

JeJ*_*eJo 6

为什么c++ 标准映射非常有名,而对数组 也与那些相似?

下表应该给你一个小想法,在哪里使用c++ 标准映射(只选择一些)而不是数组对

桌子


什么时候使用C++ 标准映射更好,什么时候使用成对数组

你总是可以对你的数据结构的效率进行基准测试,看看哪个适合哪种情况。

让我们看一个例子。

例如下面是在https://quick-bench.com/ 中做的基准测试,在每个元素的开头插入10000 个元素

  1. 成对数组(即std::vector<std::pair<int, std::string>>)vs
  2. 标准地图(即std::map<int, std::string>)vs
  3. 标准哈希映射(即std::unordered_map<int, std::string>)。

事实证明,对于此类操作,使用 C++ 标准映射比数组对更快/更高效。

见在线基准

基准1

但是,对于较少条目(让我们考虑10 个元素)的情况,相同的测试表明,对数组(即std::vector<std::pair<int, std::string>>)的使用将比标准哈希映射(即std::unordered_map<int, std::string>)更快/有效,并且几乎等同于标准映射(即std::map<int, std::string>)。

见在线基准

基准1


简而言之,经验法则是,在选择正确的数据结构以获得最佳结果之前,始终对您将要拥有的操作进行基准测试和测试。为进一步参考看看std::vectorstd::mapstd::unordered_map,等以及它们各自的操作。