2012-04-24 10 views
0

今日私は空のmap [null]マップにnull要素を作成することに注意してください。私はそれを期待していませんでした。私はちょうどnullを取得し、要素を作成しませんコンテナのようなマップはありますか?私はすべての[]を.find()に置き換える必要がないと思う。std :: mapは空に挿入されませんか?

+2

どのように「null」を取得しますか?セマンティクスは、 'operator []'が参照によって返されることです。 – juanchopanza

+2

'find()'ではなく 'at()'を見てください:http://en.cppreference.com/w/cpp/container/map/at – BoBTFish

+0

@BoBTFishいいです。 –

答えて

3

あなたはfind()で立ち往生している。それはちょうどmapがどのように設計されているのか、その唯一の違いと同じような動作のコンテナはありません。 (または、BoBTFishが言ったように、atを使用できます)

もう少し詳しく説明すると、NULL値への参照を持つことはできません。これは、要素またはend()を指すイテレータを持つか、または参照を返すか例外をスローするメソッドを持つことができることを意味します。 find()at()の2つのオプションがあります。

+1

@ acidzombie24しかし、std :: mapはキーとしてポインタ以上のものを取るように設計されています... – juanchopanza

1

好きではない場合はstd::mapに委任する独自のコンテナを作成できますが、異なるconstの実装はoperator[]となります。もちろん、参照を返すoperator[]の全体のポイントは、そのためであることに注意してください:

std::map<Key, Value> theMap; 
theMap[someKey] = someValue; 

が動作することができます。そうしないと、あなたは何を余儀なくされるだろう:

検索に find/ atを使用してより悪いトレードオフのように思える
theMap.insert(std::make_pair(someKey, someValue)]; 

。 (または、operator[]を見つけたアイテムにイテレータを返すことができますが、それはfindとまったく同じです)

+0

ああ、私は '[]単なる書き込みではなく、読み取り/書き込みです。私はC#インデクサーに甘やかされていると思います。私とその説明を思い出させるための+1 –

関連する問題