Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设置联合不起作用_C++_Stl_Set_Set Union - Fatal编程技术网

C++ 设置联合不起作用

C++ 设置联合不起作用,c++,stl,set,set-union,C++,Stl,Set,Set Union,“left”是std::set的std::vector 对于left中的每个元素(即set),我试图通过迭代“left”对另一个集合执行set union操作 为什么下面的代码不起作用。我正在尝试做两个集合的集合并集 std::vector<std::set<int> > left(num_nodes); //Both leftv and left are not empty ....there is some code here which fills them. st

“left”是std::set的std::vector 对于left中的每个元素(即set),我试图通过迭代“left”对另一个集合执行set union操作

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

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();
}
std::向量左(num_节点);
//leftv和left都不是空的……这里有一些代码填充了它们。
std::设置leftv,dummy;
for(std::set::iterator u=leftv.begin();u!=leftv.end();u++){
dummy.insert(v);//v是某个整数
std::set_并集(左[*u].begin(),左[*u].end(),dummy.begin(),dummy.end(),左[*u].begin());
dummy.clear();
}
错误
/usr/include/c++/4.3/bits/stl\u algo.h:5078:错误:只读位置“\uuuu result.std::\u Rb\u tree\u const\u迭代器::operator*,with Tp=int”

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

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

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

你能详细说明什么不起作用吗。编译器错误?运行时崩溃?您的问题不在联盟中,而是您尝试迭代的方式。你想把什么结合在一起?(leftv只是应该是左边所有集合的并集吗?)如果这都是相关的代码,那么当到达
for
循环时,
leftv
是空的,因此您没有什么可迭代的。哪两个集合?如果你指的是leftv和dummy,这里不是这样的。使用set_union是将左侧的某个项(集合的向量)与dummy进行并集。你想在这里实现什么?@SteveL leftv只是索引u的来源。并集的集合是左元素和另一个集合伪元素