2013-07-19 55 views
0

'left'std :: std :: set 对于left(设置)中的每个元素,我试图通过迭代'left'来设置联合操作到另一个set, 。set union is not working

为什么下面的代码无法正常工作。我正在尝试设置两组的联合。

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> ::运营商的只读位置”分配*与_TP = int'

+2

你能精心** **什么是不工作。编译器错误?运行时崩溃? –

+1

您的问题不在联合中,而是您尝试迭代的方式。你想结合在一起的是什么? (leftv只是左边的所有集合的联合?) – IdeaHat

+0

如果这是所有相关的代码,当'for'循环到达时'leftv'为空,所以你没有什么可以迭代。 – Angew

回答

1

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

如果你想的dummy内容添加到left[*u],然后将每一个元素:

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