‘left’ — это std :: vector из std :: set
для каждого элемента слева (который установлен), я пытаюсь выполнить операцию объединения для другого набора, перебирая ‘слева’.
Почему следующий код не работает. Я пытаюсь сделать набор из двух наборов.
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 ’
Вы пытаетесь переписать содержимое набора, давая left[*u].begin()
в качестве выходного аргумента set_union
, Элементы набора не могут быть изменены, так как их значение определяет их положение в наборе. Даже если бы вы могли, вам нужно было бы увеличить контейнер для размещения дополнительных элементов, а не просто перезаписать существующие; и выход не должен перекрываться ни с одним входным диапазоном. Подводя итог: вы не можете использовать set_union
вставить содержимое одного набора в другой.
Если вы хотите добавить содержимое dummy
в left[*u]
, затем вставьте каждый элемент:
std::copy(dummy.begin(), dummy.end(), std::inserter(left[*u]));
Других решений пока нет …