使用C ++,如果我想将vector
转换为set
或unordered_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;
}
但是,相同的技术不适用于map
或unordered_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中没有类似的复制构造函数?
一个地图项有两个“值”,而一个向量只有一个。如果要将矢量元素插入地图,则需要确定值将成为键,并且将成为值。这样做的方法是使用成对的向量(vector