0

私はこのようなset<set<int> >名前の2x3を持っていssます:

5 6 7
6 7 8

そして、私はその中のすべてを削除して、次6のようになりたいです:

5 7
7 8

私がやろうとしていること:

for (set<set<int> >::iterator it = ss.begin(); it != ss.end(); it++) {
    it->erase(6);
}

これは私にエラーを与えます:

error: passing ‘const std::set<int>’ as ‘this’ argument of ‘std::set<_Key, _Compare, _Alloc>::size_type std::set<_Key, _Compare, _Alloc>::erase(const key_type&) [with _Key = int, _Compare = std::less<int>, _Alloc = std::allocator<int>, std::set<_Key, _Compare, _Alloc>::size_type = long unsigned int, std::set<_Key, _Compare, _Alloc>::key_type = int]’ discards qualifiers [-fpermissive]

渡すことでコンパイルでき、-fpermissive正常に動作しているようですが、このエラーは何なのか疑問に思いました。

私が試したハイドの提案の後に編集してください:

for (set<set<int> >::iterator it = ss.begin(); it != ss.end(); it++) {
    set<int> temp(*it);
    temp.erase(6);
    ss.erase(*it);
    ss.insert(temp);
}

これは機能しているように見えるので、彼が言ったように、セットでは要素を変更できないと思います。

4

2 に答える 2

1

許可されていないキーを変更しようとしています

于 2012-10-21T12:34:03.627 に答える
1

上記のコメントによると、解決策:セット内のアイテムを変更しないでください。セット内のアイテムを変更することは、概念的には要素を削除して新しい要素を挿入することと同じです。したがって、解決策は

  • アウターセットを繰り返す
    • 内側のセットに不要なアイテムが含まれていないかどうかを確認します
      • その内側のセットを削除します
      • 削除されたインナーセットから不要なアイテムを削除します
      • 変更した内側のセットを外側のセットに追加します
于 2012-10-21T14:53:17.043 に答える