删除 std::set 的最终成员
如何从集合中删除最后一个成员?
例如:
set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
如何从 setInt
中删除 4
?我尝试过类似的操作:
setInt.erase(setInt.rbegin());
但收到错误。
How can I delete the last member from a set?
For example:
set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
How can I delete 4
from setInt
? I tried something like:
setInt.erase(setInt.rbegin());
but I received an error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在 C++11 中,
您可以决定如何处理集合为空的情况。
in C++11
You can decide how you want to handle cases where the set is empty.
顺便说一句,如果您经常这样做(以任意顺序将内容添加到集合中,然后删除顶部元素),您还可以查看
std::priority_queue
,看看是否适合您的用途。By the way, if you're doing this a lot (adding things to a set in arbitrary order and then removing the top element), you could also take a look at
std::priority_queue
, see whether that suits your usage.编辑:您应该使用
std::prev
< /a> 如Benjamin的更好答案所示,而不是本答案中建议的旧样式。我会提出对具有正确类型的
rbegin
使用不同的名称:假设您检查了
setInt
不为空!顺便提一句。这是有效的,因为您可以在临时变量(类型为 std::set::iterator)上调用变异递减运算符。然后这个临时值将被传递给擦除函数。
Edit: You should use
std::prev
as shown in Benjamin's better answer instead of the older style suggested in this answer.I'd propose using a different name for
rbegin
which has a proper type:Assuming you checked that
setInt
is not empty!Btw. this works because you can call the mutating decrement operator on a temporary (of type
std::set<int>::iterator
). This temporary will then be passed to the erase function.性能稍差,但有另一种选择:
A bit less performant, but an alternative option:
如果你想删除 4 个而不是最后一个,你应该使用 find 方法。
根据用例,4 可能不是最后一个。
如果你想删除最后一个元素,请使用:
虽然我不确定是否 --*.end();没关系,我读了一些书。
因此 rbegin().base() 上的 -- 会导致与 end() 上的 -- 相同的结果。
两者都应该有效。
If you want to delete 4 instead of the last you should use the find method.
Depending on the use case 4 might not be the last.
If you want to delete the last element use:
While I was not sure if --*.end(); is O.K. I did some reading.
So the -- on rbegin().base() leads to the same result as -- on end().
And both should work.
检查集合是否为空。如果不是,则获取最后一个元素并将其设置为迭代器,并减少该迭代器并删除最后一个元素。
Check if the set is empty or not. If not, then get the last element and set that as iterator and reduce that iterator and erase the last element.