如果我们有
std::set<int > a;
std::vector<std::unordered_set<int>> b;
我们在a
b
方法1:我们可以:
std::set<int > a;
std::vector<std::unordered_set<int>> b (a.begin(), a.end());
方法2,我们不能这样做?
std::set<int > a;
std::vector<std::unordered_set<int>> b;
b.insert(a.begin(), a.end());
此错误意味着什么?
错误C2664: “的std :: _ Vector_iterator,性病:: equal_to&LT; _Kty&GT;,的std ::分配器&LT; _Kty&GT;&GT;&GT;&GT;&GT; 的std ::向量,性病:: equal_to&LT; _Kty&GT;,的std ::分配器&LT; _Kty&GT;&GT;,的std ::分配器&LT; _Ty&GT;&GT; ::插入(STD :: _ Vector_const_iterator,性病:: equal_to&LT; _Kty&GT;,标准::分配器&LT; _Kty&GT;&GT;&GT;&GT;&GT;无符号 int,const _Ty&amp;)':无法转换参数1 '的std :: _ Tree_const_iterator&GT;&GT;' 至 '的std :: _ Vector_const_iterator,性病:: equal_to&LT; _Kty&GT;,的std ::分配器&LT; _Kty&GT;&GT;&GT;&GT;&GT;' IntelliSense:没有重载函数的实例“std :: vector&lt; _Ty, _Alloc&gt; :: insert [with _Ty = std :: unordered_set,std :: equal_to,std :: allocator&gt;, _Alloc = std :: allocator,std :: equal_to,std :: allocator&gt;&gt;]“匹配参数列表 参数类型是:(std :: _ Tree_const_iterator&gt;&gt;, 的std :: _ Tree_const_iterator&GT;&GT) 对象类型是:std :: vector,std :: equal_to,std :: allocator&gt;, 的std ::分配器, std :: equal_to,std :: allocator&gt;&gt;&gt;
如果我们需要将b
作为全球unordered_set
来处理,那么解决方案是什么?
答案 0 :(得分:3)
对于方法1,您可以按如下方式进行:
std::set<int> a{ 1, 2, 3, 4, 5};
std::vector<std::unordered_set<int>> b(1, std::unordered_set<int>(a.begin(), a.end()));
对于方法二,您可以这样做:
std::set<int> a{ 1, 2, 3, 4, 5};
std::vector<std::unordered_set<int>> b(1);
b[0].insert(a.begin(), a.end());
或者作为:
std::set<int> a{ 1, 2, 3, 4, 5};
std::vector<std::unordered_set<int>> b;
b.push_back({a.begin(), a.end()});
<强> LIVE DEMO 强>
或者@Ben Voigt建议:
std::set<int> a{ 1, 2, 3, 4, 5};
std::vector<std::unordered_set<int>> b;
b.emplace_back(a.begin(), a.end());
<强> LIVE DEMO 强>
答案 1 :(得分:2)