在没有c ++ 11的情况下擦除地图的最后插入元素的正确方法是什么?

时间:2012-08-25 10:29:57

标签: c++ map

问题是不言自明的。但补充假设:map<int,int>至少插入10个元素。删除最后插入的元素的正确方法是什么?

通过插入的最后一个元素,我的意思是,不是地图的最后一个元素,而是我上次插入元素时插入的元素。

2 个答案:

答案 0 :(得分:6)

将迭代器保存到最后插入的元素。地图中的元素按键值排序,而不是按插入顺序排序。

map::insert返回最后一个插入元素的迭代器(和bool,表示是否发生了插入)。

auto p = yourMap.insert(k,v);
if(p.second) {
    lastInsert = p.first;
} else {
    //Ambiguous. Depending on what you want
    //this could be an error, or you update the value and the iterator,
    //or you update just the value.
}

http://en.cppreference.com/w/cpp/container/map/insert

答案 1 :(得分:5)

没有API功能可以做到这一点。如果跟踪您插入元素的顺序非常重要,那么您将不得不进行vector<map<...>::iterator>插入,并在从{{{{}}移除内容时使其保持最新状态。 1}}。

具体取决于您的代码的结构,map的位置以及与之交互的内容。