[解決済み] 地図に挿入する際の好ましい/慣用的な方法は何ですか?
2022-05-03 01:18:29
質問
に要素を挿入する4つの異なる方法を確認しました。
std::map
:
std::map<int, int> function;
function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));
どれが好ましい/慣用的な方法なのでしょうか?(また、私が思いつかないような別の方法がありますか?)
解決方法は?
まず最初に
operator[]
と
insert
メンバー関数は機能的に同等ではありません。
-
は
operator[]
意志 検索 を挿入してください。 デフォルトで構築された の値が見つからなければその参照を返し、その参照に値を割り当てる。明らかに、これはmapped_type
は、デフォルトの構築と代入の代わりに、直接初期化することで利益を得ることができます。また、この方法では、挿入が本当に行われたのか、それとも以前に挿入されたキーの値を上書きしただけなのかを判断することができません。 -
は
insert
メンバ関数はキーが既にマップに存在する場合は何の効果もありません。std::pair<iterator, bool>
これは興味深いものです (特に、挿入が実際に行われたかどうかを判断するため)。
リストアップされたすべての呼び出しの可能性から
insert
は、3つとも
ほとんど
と等価です。念のため、次の項目を見てみましょう。
insert
の署名があります。
typedef pair<const Key, T> value_type;
/* ... */
pair<iterator, bool> insert(const value_type& x);
では、この3つのコールはどのように違うのでしょうか?
-
std::make_pair
はテンプレート引数の演繹に依存しており、(この場合は は とは異なる型のものを生成します。value_type
を追加で呼び出す必要があります。std::pair
に変換するために、テンプレートコンストラクタを使用します。value_type
(例)const
にfirst_type
) -
std::pair<int, int>
のテンプレートコンストラクタを追加で呼び出す必要があります。std::pair
に変換するために、パラメータをvalue_type
(例)const
にfirst_type
) -
std::map<int, int>::value_type
が期待するパラメータ型であるため、疑う余地はありません。insert
のメンバー関数があります。
結局のところ、私は
operator[]
挿入を目的とする場合、デフォルトの構築と
mapped_type
そして、新しいキーが効果的に挿入されたかどうかの判断はどうでもいいということです。また
insert
を構築することです。
value_type
は、おそらくその方法です。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】std::mapからすべてのキー(または値)を取得し、それらをベクトルに入れるには?
最新
-
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++でint型に無限大を設定する
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】STLのマップでは、[]よりもmap::insertを使う方が良いのか?]