如何使用`std :: set`中的反向迭代器擦除元素?

时间:2017-11-11 14:17:48

标签: c++ stl c++14

面对删除集合中最后一个元素的问题:

#include <bits/stdc++.h>
using namespace std;
int main()
{
set < pair <int,int > > a;
a.insert(make_pair(2,3)); 
auto it = a.rbegin();
a.erase(it.base()); // for deleting last element in set
cout << a.size() << endl;
return 0; 
}

获取运行时问题,同时尝试了自动迭代器常量迭代器,它&#39 ; s不工作。有没有其他方法可以擦除一组中的元素?

编辑:如何根据迭代器引用删除特定元素? 如果我喜欢:

auto it=a.begin(); a.erase(it); Here it = reference to the element for deletion

它没有用。任何其他基于迭代器引用的删除方式?

1 个答案:

答案 0 :(得分:3)

  

还有其他方法可以从集合中删除元素吗?

a.erase(std::prev(std::end(a)));
  

你能告诉我,我的代码有什么问题吗?

itr.base()其中itr == a.begin()相当于a.end()。请参阅:http://en.cppreference.com/w/cpp/iterator/reverse_iterator/base

删除过去的迭代器是未定义的行为