C++ 设置联合不起作用
“left”是std::set的std::vector 对于left中的每个元素(即set),我试图通过迭代“left”对另一个集合执行set union操作 为什么下面的代码不起作用。我正在尝试做两个集合的集合并集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
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的来源。并集的集合是左元素和另一个集合伪元素