0

'left' は、std::set の std::vector であり、左 (設定されている) の各要素に対して、'left' を反復処理することにより、別のセットにセット ユニオン操作を実行しようとしています。

次のコードが機能しないのはなぜですか。私は2つのセットのセットユニオンをやろうとしています。

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>::operator* with _Tp = int' の割り当て</p>

4

1 に答える 1

1

left[*u].begin()の出力引数としてを与えることにより、セットの内容を上書きしようとしていますset_union。セットの要素は、その値によってセット内の位置が決まるため、変更できません。できたとしても、単に既存の要素を上書きするのではなく、余分な要素に対応するようにコンテナーを拡張する必要があります。また、出力はいずれの入力範囲とも重複してはなりません。set_union要約すると、 を使用して、あるセットの内容を別のセットに挿入することはできません。

dummyの内容をtoに追加する場合はleft[*u]、各要素を挿入します。

std::copy(dummy.begin(), dummy.end(), std::inserter(left[*u]));
于 2013-07-19T15:25:24.127 に答える