Operator[] と at() を使用した定数マップ内の要素へのアクセス
定数 std::map を操作する場合、要素で演算子[]を使用すると問題が発生する可能性があります。この方法は直感的に使用できるように思えますが、コンパイルに失敗します。これは、キーが存在しない場合に、operator[] がマップを変更する非 const マップを期待しているためです。
ただし、代わりのメソッド at() があり、これは特に C 11 で導入されました。この目的。 Operator[] とは異なり、at() は、キーが存在しない場合、デフォルトの構築要素を挿入するのではなく、std::out_of_range 例外をスローします。
この動作は、定数マップの概念とよく一致しています。 at() の const オーバーロードを定義することにより、意図しない変更が行われる可能性がなく、要素に安全かつ効率的にアクセスできるようになります。
説明のために、次の例を考えてみましょう。
#include <iostream> #include <map> int main() { std::map<int, char> A; A[1] = 'b'; A[3] = 'c'; const std::map<int, char> B = A; std::cout << B.at(3) << std::endl; // works std::cout << B[3] << std::endl; // cannot access (compile error) }
このシナリオでは、B で Operator[] を使用すると、コンパイル時エラーが発生します。これは、B が const マップであり、変更できないためです。ただし、at() メソッドは、マップの const の性質を認識し、キーが存在しない場合に例外をスローするため、完全に機能します。
したがって、const std::map 内の要素にアクセスする場合は、 at() は、意図しない変更を防ぐために推奨される安全なアプローチです。この機能の詳細については、C 11 標準または std::map クラスに関連するドキュメントを参照してください。
以上がConst std::map アクセス: `operator[]` と `at()` – どちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。