用新条目替换std :: map中的键范围

时间:2016-06-23 21:00:03

标签: c++ stdmap

对于std::map<K,V>,是否有更好的方法用一个新元素用一定范围内的键[first,last]替换所有元素?新元素(k', v')将放置在与原始范围元素相同的位置。例如,如果我有一个包含元素的地图 { (0,'a'), (10, 'b'), (20, 'c'), (30,'d'), (40,'e')},我想删除元素{(10, 'b'), (20, 'c')},并在(k', v')地图中添加新元素0 < k' < 30

我能想到的最好的是

auto left = map.lower_bound(first);
auto right = map.upper_bound(last);
map.insert( map.erase(left, right), make_pair(k',v') );

这需要三次O(log n)操作来搜索两个键并对元素进行范围擦除。由于提示,插入是分摊的常量。我知道组合这三个操作仍然是O(log)。我想知道是否有一些我无法看到的技巧,例如结合搜索和擦除操作,但std::map没有erase(firstKey, lastKey)功能。

0 个答案:

没有答案