std :: mapを使用して数値シミュレーション用のプログラムを作成して、いくつかのキーと値のペアを格納しています。このマップは、シミュレーション中に発生した状態を保存するために使用されます。キーのタイプは整数であり、キーに対応する値は同じキーに対していくつのコピーが存在するか、すなわちstd :: mapを指示する。シミュレーションの各ステップについて、私は同じキーのためにそこにあるどのように多くの値を計算する必要があるので、私は次のコードキーの参照に関するstd :: mapの動作
if (map[key]>0) {do something here with the number of copies}
によりしかし、私はすぐにこのコードがあるために動作しないことが判明することを確認しますそのようなキーがマップに存在しない場合でも、[key]マップを呼び出すたびに、そのキーのプレースホルダが生成され、その値がゼロに設定されます。したがって、私は常にstd :: map.size()でキーの総数をオーバーカウントします。代わりに
if (map.find(key)!=map.end()) {...}
キーを検索するために従うように私は後でだから、キーがマップに存在するかどうかをチェックするための唯一かつ最速の方法ですコードを変更しますか?私は数百万回もシミュレーションを実行するつもりですし、キーをチェックするために非常に頻繁にコードを呼び出すでしょう。代わりにmap.find()を使用するのが遅すぎますか?ありがとう。
ありがとう、それはunordered_mapが1つの解決策であるようです。したがって、mapとunordered_mapの唯一の違いは、動的にソートされていないキーです。 – user1285419
@ user1285419:使い方の違いはこれだけです。その下には、それらは非常に異なった形で格納されます( 'std :: map'はバランスのとれたツリーですが、' std :: unordered_map'はハッシュテーブルです)。 –