对于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)
功能。