gpt4 book ai didi

c++ - 设置 union 不起作用

转载 作者:行者123 更新时间:2023-11-28 07:30:54 25 4
gpt4 key购买 nike

'left' 是 std::set 的 std::vector对于左边的每个元素(已设置),我试图通过迭代“左边”来对另一个集合进行集合并集操作。

为什么下面的代码不起作用。我正在尝试将两组并集。

std::vector<std::set<int> > left(num_nodes);
//Both leftv and left are not empty ....there is some code here which fills them.
std::set<int> leftv, dummy;

for(std::set<int>::iterator u = leftv.begin(); u != leftv.end() ;u++){
dummy.insert(v); //v is some integer
std::set_union (left[*u].begin(), left[*u].end(), dummy.begin(), dummy.end(), left[*u].begin());
dummy.clear();
}

错误/usr/include/c++/4.3/bits/STL_algo.h:5078: 错误:分配只读位置‘__result.std::_Rb_tree_const_iterator<_Tp>::operator* with _Tp = int’

最佳答案

您试图通过将 left[*u].begin() 作为 set_union 的输出参数来覆盖集合的内容。不能修改集合的元素,因为它们的值决定了它们在集合中的位置。即使可以,您也需要扩大容器以容纳额外的元素,而不是简单地覆盖现有元素;并且输出不得与任一输入范围重叠。总结一下:您不能使用 set_union 将一个集合的内容插入到另一个集合中。

如果要将dummy的内容添加到left[*u],则插入每个元素:

std::copy(dummy.begin(), dummy.end(), std::inserter(left[*u]));

关于c++ - 设置 union 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com