1. ホーム
  2. c++

[解決済み] std::map insert と std::map find どっちがいい?

2023-01-21 07:25:06

質問

既存のエントリーを保持したいマップを想定しています。20%の確率で、挿入するエントリーは新しいデータです。 返されたイテレータを使用して std::map::find を実行してから std::map::insert を実行することに利点がありますか? それとも、挿入を試みてから、イテレーターがレコードが挿入されたか挿入されなかったかを示すかどうかに基づいて行動する方が速いですか?

どのように解決するのですか?

答えは、どちらもしないことです。 その代わりに、あなたは 効果的なSTL によって スコット・マイヤーズ :

typedef map<int, int> MapType;    // Your map type may vary, just change the typedef

MapType mymap;
// Add elements to map here
int k = 4;   // assume we're searching for keys equal to 4
int v = 0;   // assume we want the value 0 associated with the key of 4

MapType::iterator lb = mymap.lower_bound(k);

if(lb != mymap.end() && !(mymap.key_comp()(k, lb->first)))
{
    // key already exists
    // update lb->second if you care to
}
else
{
    // the key does not exist in the map
    // add it to the map
    mymap.insert(lb, MapType::value_type(k, v));    // Use lb as a hint to insert,
                                                    // so it can avoid another lookup
}