【发布时间】:2012-11-12 15:50:58
【问题描述】:
在寻找一种仅在键不存在时才插入地图的有效方法时,我遇到了this approach:
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是否有等效的策略?还是不适用?
【问题讨论】:
标签: c++ optimization map boost-ptr-container