【发布时间】:2020-06-05 15:40:17
【问题描述】:
使用 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 的类似复制构造函数?
【问题讨论】:
-
每个问题回答一个问题
-
map应该如何猜测你想要的值类型? -
我相信您无关问题的答案是(2)和(2)。除此之外,我们可以专注于您的主要问题:您希望
unordered_map<int, size_t> uMap(vec.begin(), vec.end());完成什么?该行表示要构建从int到size_t的映射,但您没有提供任何size_ts。如果该构造可行,您期望的价值是多少,比如说uMap[3]?
标签: c++ set unordered-map unordered-set