我们有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。当然,稍后我们将需要访问该映射以获取与键相对应的值。
答案 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