慢std :: map用于大型条目

时间:2018-12-10 12:20:46

标签: c++ performance hashmap

我们有48,16,703个这种格式的条目。

1 abc
2 def
...
...
4816702 blah
4816703 blah_blah

由于条目的数量很大,我担心std :: map在插入期间会花费很多时间,因为它也需要为每次插入进行平衡。

仅将这些条目插入地图会花费很多时间。我在做

map[first] = second;

两个问题:  1.对于这种情况,我是否正确使用std :: map?  2.我按上述方式正确插入吗?或者我应该使用map.insert()

很抱歉没有进行实验并写出绝对数字,但是如果我们做对或不做对,我们都希望达成普遍共识。

此外,它们的键并不总是连续的。

P.S。当然,稍后我们将需要访问该映射以获取与键相对应的值。

2 个答案:

答案 0 :(得分:7)

如果您以后无需再插入地图,则可以构造数据的未排序向量,然后根据键对其进行排序,然后使用std::equal_range之类的函数进行搜索。
它与std::map的复杂度相同,但分配量却少得多。

答案 1 :(得分:2)

使用std::unordered_map,它的插入时间复杂度比std::map好,如参考文献所述:

Complexity

Single element insertions:
    Average case: constant.
    Worst case: linear in container size.

Multiple elements insertion:
    Average case: linear in the number of elements inserted.
    Worst case: N*(size+1): number of elements inserted times the container size plus one.

May trigger a rehash (not included in the complexity above).

这比std::map的对数时间复杂度要好。

注意:std::map的插入可以享受“ 摊销常数,如果给出了提示并且给出的位置是最佳的”。如果是这样,请使用地图(如果不适用矢量)。

@ n.m。提供代表性的 Live demo