在寻找一种仅在密钥不存在时才插入地图的有效方法时,我遇到了 这种方法:
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()
即接受迭代器位置的形式。
所以我想知道:
与直接插入相比,这种方法有什么好处?IE
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
?还是不适用?