如何将不同的std :: unordered_map合并为一个?鉴于所有的钥匙都是独一无二的?
例如:
std::unordered_map<uint64_t, uint64_t> h1, h2, h3, h4;
h1.insert({5, 1});
h1.insert({120, 2});
h2.insert({7, 4});
h4.insert({199,1})
std::unordered_map<uint64_t, uint64_t> h5;
是否有一个将所有KeyValue对从h1,h2,h3,h4推入O(1)操作中的unordered_map h5或者不再使用哈希所有键。
它不必仅是std :: unordered_map。在C ++ 14中任何哈希表的化身都没问题。这提供了O(1)插入和查询。
答案 0 :(得分:0)
在C ++ 17中,您可以使用merge
或(extract
和insert
)来完成此操作。
h5.merge(h1);
h5.merge(h2);
h5.merge(h3);
h5.merge(h4);
任何重复项都会保留在h1
到h4
之内。可以编写更加手动的extract
/ insert
循环,但由于merge
完全符合您的要求,因此不需要。
这不是O(1),因为哈希映射需要工作来管理其条目并可能增长。但它不会重新散列,也不会复制任何元素。它只是移动节点。
在C ++ 11和14中,你无法避免重新散列。