将具有唯一键的哈希表合并到一个C ++中

时间:2017-03-02 03:31:08

标签: c++ c++11 c++14

如何将不同的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)插入和查询。

1 个答案:

答案 0 :(得分:0)

在C ++ 17中,您可以使用merge或(extractinsert)来完成此操作。

h5.merge(h1);
h5.merge(h2);
h5.merge(h3);
h5.merge(h4);

任何重复项都会保留在h1h4之内。可以编写更加手动的extract / insert循环,但由于merge完全符合您的要求,因此不需要。

这不是O(1),因为哈希映射需要工作来管理其条目并可能增长。但它不会重新散列,也不会复制任何元素。它只是移动节点。

在C ++ 11和14中,你无法避免重新散列。