【发布时间】:2019-05-11 08:17:32
【问题描述】:
我们有 48,16,703 个这种格式的条目。
1 abc
2 def
...
...
4816702 blah
4816703 blah_blah
由于条目的数量很大,我担心 std::map 在插入过程中会花费很多时间,因为它还需要为每次插入进行平衡。
仅将这些条目插入地图需要很长时间。我在做
map[first] = second;
两个问题: 1.我在这些情况下使用 std::map 是否正确? 2.我按上述方式插入是否正确。或者我应该使用 map.insert()
我很抱歉没有做实验并写出绝对数字,但我们希望就我们做对与否的事情达成普遍共识。
此外,它们的键并不总是连续的..
附:当然,稍后我们还需要访问该映射以获取与键对应的值。
【问题讨论】:
-
如果键只是一个连续的整数序列,你可以使用数组或向量
-
@Tharwen,感谢您的快速回答,但它们不是连续的。那是不好的部分。编辑了问题。
-
如果不是,
std::unordered_map应该更合适,因为它的插入平均时间复杂度是恒定的。 -
即使数字不连续,但有很多条目,例如超过最大索引的一半,并且您更关心速度而不是大小,使用具有 o(1) 插入和检索的数组或向量可能仍然更有意义。
-
如果您的键序列已经排序,请尝试
map.insert(map.end(), {first, second})。 Demo。即使他们大部分是连续的,这将是一场胜利。
标签: c++ performance hashmap