1. ホーム
  2. c++

C++ std::set の更新が面倒: その場で要素を変更できない

2023-09-26 15:57:31

質問

に対する更新操作を見つけたのですが std::set にはそのような API がないので、面倒です。 cppreference . ということで、現在私がやっているのはこんな感じです。

//find element in set by iterator
Element copy = *iterator;
... // update member value on copy, varies
Set.erase(iterator);
Set.insert(copy);

で返すイテレータは基本的に Setconst_iterator であり、その値を直接変更することはできません。

もっといい方法はないでしょうか?または、多分私はオーバーライド std::set をオーバーライドする必要があるのかもしれません(これがどのように機能するかはよく分かりませんが...)

どのように解決するのですか?

set 戻る const_iterators (標準では set<T>::iteratorconst であり、その set<T>::const_iterator であり set<T>::iterator は実際には同じ型かもしれません - n3000.pdfの23.2.4/6を参照) なぜなら、これは順序付きコンテナだからです。もしそれが通常の iterator を返した場合、コンテナの下から項目の値を変更することが許可され、潜在的に順序を変更することができます。

あなたの解決策は、コンテナ内の項目を変更する慣用的な方法である set .