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);
で返すイテレータは基本的に
Set
は
const_iterator
であり、その値を直接変更することはできません。
もっといい方法はないでしょうか?または、多分私はオーバーライド
std::set
をオーバーライドする必要があるのかもしれません(これがどのように機能するかはよく分かりませんが...)
どのように解決するのですか?
set
戻る
const_iterators
(標準では
set<T>::iterator
は
const
であり、その
set<T>::const_iterator
であり
set<T>::iterator
は実際には同じ型かもしれません - n3000.pdfの23.2.4/6を参照) なぜなら、これは順序付きコンテナだからです。もしそれが通常の
iterator
を返した場合、コンテナの下から項目の値を変更することが許可され、潜在的に順序を変更することができます。
あなたの解決策は、コンテナ内の項目を変更する慣用的な方法である
set
.
関連
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] 集合から要素を削除せずに取り出すには?
-
[解決済み] ある要素がstd::setに含まれているかどうかを確認する方法は?
-
[解決済み] セットから要素を取得する
-
[解決済み] カスタムstd::setコンパレータを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。