std::setやstd::multisetで末尾の要素を削除するには、https://www.geeksforgeeks.org/how-to-delete-last-element-from-a-set-in-c/ で紹介されているテクニックを使います。例えばs
をstd::setのオブジェクトとした場合、std::prev(s.end())
が末尾の要素を指すので、s.erase(std::prev(s.end()))
とすれば末尾の要素を削除できます。例を以下に示します。wandboxで試すこともできます。
#include <iostream> #include <set> int main() { std::set<int> s{3, 2, 1, 5, 4}; s.erase(std::prev(s.end())); // 1 2 3 4 と表示される for(auto e: s) std::cout << e << " "; std::cout << std::endl; std::multiset<int> ms{3, 2, 1, 5, 5, 4, 4}; ms.erase(std::prev(ms.end())); // 1 2 3 4 4 5 と表示される for(auto e: ms) std::cout << e << " "; std::cout << std::endl; return 0; }
setやmultisetの要素数がゼロの場合、上記コードは実行時にSegmentation faultを吐くので気をつけてください。