[英]Erase final member of std::set
如何從集合中刪除最后一個成員?
例如:
set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
如何從setInt
刪除4
? 我試過類似的東西:
setInt.erase(setInt.rbegin());
但我收到一個錯誤。
在 C++11 中
setInt.erase(std::prev(setInt.end()));
您可以決定如何處理集合為空的情況。
if (!setInt.empty()) {
std::set<int>::iterator it = setInt.end();
--it;
setInt.erase(it);
}
順便說一句,如果您經常這樣做(以任意順序將內容添加到集合中,然后刪除頂部元素),您還可以查看std::priority_queue
,看看這是否適合您的使用。
性能稍差,但另一種選擇:
setInt.erase(*setInt.rbegin());
如果你想刪除 4 而不是最后一個,你應該使用 find 方法。 根據用例,4 可能不是最后一個。
std::set<int>::iterator it = setInt.find(4);
if(it != setInt.end()) {
setInt.erase(it);
}
如果要刪除最后一個元素,請使用:
if (!setInt.empty()) {
setInt.erase(--setInt.rbegin().base());
// line above is equal to
// setInt.erase(--setInt.end());
}
雖然我不確定 --*.end(); 沒關系我做了一些閱讀。 所以 -- on rbegin().base() 導致與 -- on end() 相同的結果。 兩者都應該有效。
檢查集合是否為空。 如果沒有,則獲取最后一個元素並將其設置為迭代器並減少該迭代器並擦除最后一個元素。
if (!setInt.empty())
{
std::set<int>::iterator it = setInt.end();
--it;
if(it != setInt.end()) {
setInt.erase(it);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.