'left'是std :: vector的std :: vector 对于左边的每个元素(设置),我试图通过迭代'left'来设置联合操作到另一个集合。
为什么以下代码无效。我正在尝试设置两套联合。
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&lt; _Tp&gt; :: operator * with _Tp = int'
答案 0 :(得分:1)
您试图通过将left[*u].begin()
作为set_union
的输出参数来覆盖集合的内容。无法修改集合的元素,因为它们的值决定了它们在集合中的位置。即使你可以,你也需要增加容器以容纳额外的元素,而不是简单地覆盖现有的元素;并且输出不得与任何输入范围重叠。总结一下:您不能使用set_union
将一组内容插入另一组。
如果您要将dummy
的内容添加到left[*u]
,请插入每个元素:
std::copy(dummy.begin(), dummy.end(), std::inserter(left[*u]));