将向量中的所有元素复制到map / unordered_map的C ++最佳方法

问题描述 投票:-1回答:1

使用C ++,如果我想将vector转换为setunordered_set容器,可以很容易地通过以下方式完成:

#include <iostream>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;

int main() {
    vector<int> vec {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};

    // pass
    unordered_set<int> uSet(vec.begin(), vec.end());
    // pass
    set<int> s(vec.begin(), vec.end());
    // fail
    unordered_map<int, size_t> uMap(vec.begin(), vec.end());
    // fail
    map<int, size_t> m(vec.begin(), vec.end());

    return 0;
}

但是,相同的技术不适用于mapunordered_map容器。我想知道是否有更好的方法将矢量中的所有元素存储到map / unordered_map容器中,而不是:

for (int ele : vec) {
    ++uMap[ele];
}

此外,下面的代码将调用https://en.cppreference.com/w/cpp/container/unordered_set/unordered_set中的哪个复制构造函数:

set<int> s(vec.begin(), vec.end()); 

以及为什么https://en.cppreference.com/w/cpp/container/unordered_map/unordered_map中没有类似的复制构造函数?

c++ set unordered-map unordered-set
1个回答
0
投票

一个地图项有两个“值”,而一个向量只有一个。如果要将矢量元素插入地图,则需要确定值将成为键,并且将成为值。这样做的方法是使用成对的向量(vector >),该向量可以用于初始化地图,就像您之前已经做过的一样。]

© www.soinside.com 2019 - 2024. All rights reserved.