キーが存在しない場合にのみマップに挿入する効率的なアプローチを探しているときに、このアプローチに出くわし ました:
MapType::iterator lb = mymap.lower_bound(k);
if(lb != mymap.end() && !(mymap.key_comp()(k, lb->first))) {
// key exists. Value accessible from lb->second
} else {
// Do insert. Use lb as a hint to insert so it can avoid another lookup
mymap.insert(lb, MapType::value_type(k, v));
}
それはうまく機能しstd::map
ます。ただし、イテレータの位置を受け入れるものboost::ptr_map
と同様の形式は提供されません。insert()
だから私は疑問に思っています:
単純な挿入を行う場合と比較して、そのアプローチの利点は何ですか? すなわち
std::pair<MapType::iterator, bool> ret; ret = mymap.insert(MapType::value_type(k, v)); if (!ret.second) { // key exists. insertion not done. do something else }
実際にアプローチを使用する正当な理由が
lower_bound
ある場合、同等の戦略はありboost::ptr_map
ますか? それとも当てはまりませんか?