擦除std :: set的最终成员

her*_*ian 25 c++ stl set

如何删除集合中的最后一个成员?

例如:

set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
Run Code Online (Sandbox Code Playgroud)

如何删除4setInt?我尝试过类似的东西:

 setInt.erase(setInt.rbegin());
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.

Ben*_*ley 35

在C++ 11中

setInt.erase(std::prev(setInt.end()));
Run Code Online (Sandbox Code Playgroud)

您可以决定如何处理集合为空的情况.


Ste*_*sop 20

if (!setInt.empty()) {
    std::set<int>::iterator it = setInt.end();
    --it;
    setInt.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你这么做(按任意顺序添加东西然后删除顶部元素),你也可以看看std::priority_queue,看看是否适合你的用法.


bit*_*ask 7

我建议使用一个rbegin具有正确类型的不同名称:

setInt.erase(--setInt.end());
Run Code Online (Sandbox Code Playgroud)

假设你检查setInt不是空的!

顺便说一句.这是有效的,因为你可以在临时(类型std::set<int>::iterator)上调用变异减量运算符.然后将该临时值传递给擦除功能.