私はLLVMで働いている、と私は私が書いていない次のコードで問題を抱えている:std :: mapのoperator []はどのような状況で0を返しますか?
static std::map<std::string, Value*> NamedValues;
... //Lots of other code
Value *V = NamedValues["Demo string"];
return V ? V : ErrorV("V is not in NamedValues map.");
私はSTDの理解何より::マップは、nullを返すことはありません私はVが0であることがVが地図にないことを示す方法を理解するのに苦労しています。つまり、私のプログラムはいつもここでエラーになっていますが、私は理由を理解できません。ここで何が起こっているの?
['count'メソッド](http://en.cppreference.com/w/cpp/container/map/count)は' find!= end'よりやや効率的ですが、いいえ?少なくとも(map.count(yourKey)){'は' map'sが一意のキーを持っているので、見つかった場合は '1'を返し、見つからない場合は' 0'を返します。注:上向きに投票され、ちょうど微調整を行うことができます。 – ShadowRanger
@ShadowRanger findは、マップを2回検索する必要がないため、値が見つかった場合(OPコードが行う)値を使用したい場合は、より効率的です。 'count'メソッドは、それがそこにあるかどうかだけを知りたい場合は、より良い方法です。 – Galik
@ギャリック:同意。私はもっと注意を払うべきだった。この例のように 'find'の戻り値を格納しないと助けになりません。 – ShadowRanger