当前位置: 首页 > 知识库问答 >
问题:

我们如何在std::vector中插入std::set

长孙瑞
2023-03-14

如果我们有

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());

方法二,我们不能这样做?

std::set<int > a;
std::vector<std::unordered_set<int>> b;
b.insert(a.begin(), a.end()); 

这个错误意味着什么?

错误C2664:“标准::_Vector_iterator,标准::equal_to

如果我们需要将b作为全局unordered_set来处理,解决方案是什么?

共有2个答案

申博厚
2023-03-14

对于方法2:

vector::insert()的重载不需要两个迭代器。请尝试以下操作:

b.insert( b.begin(), { a.begin(), a.end() } )

东方俊明
2023-03-14

对于方法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()});

现场演示

或者正如@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());

现场演示

 类似资料:
  • 下面的代码显示了我要做的:

  • 我在std::sort中发现了一个bug,特别是在一些QuickSort的实现中,我不知道问题是否出在一般的算法中。 精华: 当元素小于16时,所有的规范都被替换,因为std::sort使用插入排序。 当有17个或更多的元素时,使用快速排序,并从元素数量的对数限制递归深度,但向量在第一次__introsort_loop迭代时有时间恶化。 当有许多相同的元素时,就会出现向量损坏。用无效迭代器替换有效

  • 错误:无法将类型为“std::_bit_reference&”的非常量lvalue引用绑定到类型为“std::vector::reference”{aka“std::_bit_reference”}的rvalue 因此,它抱怨,因为只有第二个参数是rvalue

  • 我有一个整数向量: 考虑到将始终为偶数。 我只是想把相邻的元素转换成一对,像这样: 即,两个相邻元件接合成一对。 我可以使用什么STL算法轻松实现这一点?有没有可能通过一些标准算法来实现这一点? 当然,我可以很容易地编写一个旧的索引for循环来实现这一点。但我想知道最简单的解决方案是什么,使用rangebased for循环或任何其他STL算法,比如,等等。

  • 我在下面声明std: map: 但是我有很多错误,比如: 错误16错误C2676:二进制' 我做错了什么?

  • 要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。