установить союз не работает

‘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 ’

0

Решение

Вы пытаетесь переписать содержимое набора, давая left[*u].begin() в качестве выходного аргумента set_union, Элементы набора не могут быть изменены, так как их значение определяет их положение в наборе. Даже если бы вы могли, вам нужно было бы увеличить контейнер для размещения дополнительных элементов, а не просто перезаписать существующие; и выход не должен перекрываться ни с одним входным диапазоном. Подводя итог: вы не можете использовать set_union вставить содержимое одного набора в другой.

Если вы хотите добавить содержимое dummy в left[*u], затем вставьте каждый элемент:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]