【C++】std::setから最後の要素を削除する方法をわかりやすく解説
C++のSTLには、set(セット)という連想コンテナが用意されています。setは要素を自動的に昇順ソートして格納するため、挿入した順序に関係なく、常に整列された状態で管理されます。
本記事では、このsetから最後の要素を削除する方法を解説します。例えば、要素が [10, 41, 54, 20, 23, 69, 84, 75] の配列からsetを作成すると、内部では [10 20 23 41 54 69 75 84] のようにソートされ、最後の要素は 84 になります。この84を削除するコードを見ていきましょう。
ポイント:prev()で最後の要素へのイテレータを取得する
setの end() イテレータは「末尾の要素の次」を指すため、そのまま erase() に渡すことはできません。そこで、std::prev() を使って end() の一つ前、つまり実際の最後の要素を指すイテレータを取得します。これを erase() に渡すことで、末尾の要素だけを安全に削除できます。
サンプルコード
#include<iostream>
#include<set>
using namespace std;
void display(set<int> my_set){
for (auto it = my_set.begin(); it != my_set.end(); ++it)
cout << *it << " ";
}
int main() {
int arr[] = {10, 41, 54, 20, 23, 69, 84, 75};
int n = sizeof(arr)/sizeof(arr[0]);
set<int> my_set;
for(int i = 0; i < n; i++){
my_set.insert(arr[i]);
}
cout << "Set before delete: ";
display(my_set);
set<int>::iterator it;
it = prev(my_set.end()); // 最後の要素を指すイテレータを取得
my_set.erase(it); // その要素を削除
cout << "\nSet after delete: ";
display(my_set);
}
実行結果
Set before delete: 10 20 23 41 54 69 75 84 Set after delete: 10 20 23 41 54 69 75
コードの解説
- insert():配列の各要素をsetに挿入します。重複や挿入順序に関係なく、自動的に昇順でソートされます。
- prev(my_set.end()):
end()は末尾の次を指すため、prev()で一つ戻り、最後の要素(84)を指すイテレータを取得します。 - erase(it):指定したイテレータが指す要素をsetから削除します。
補足:別の書き方
std::prev() はC++11以降で利用可能です。古い規格(C++98/03)の環境では、--my_set.end() のようにデクリメントして同じ位置を取得することもできます。また、逆イテレータ rbegin() を使って最後の要素へアクセスする方法もありますが、erase() に渡す場合は通常のイテレータへの変換が必要なため、実務では prev(end()) を使うのがシンプルで一般的です。
-
iCloudからメッセージを削除する方法【iPhone・Mac対応】
iCloudは、Appleのリモートサーバー上にデータや個人情報を安全に保管するために設計されたクラウドサービスです。メール、メッセージ、写真、動画などをバックアップ・同期できるほか、無料で5GBのデータ容量が提供されます。ただし、5GBではすぐに容量がいっぱいになってしまうことも多く、「iCloudのメッセージを削除したい」と考える方も少なくありません。この記事では、iCloudからメッセージを削除する具体的な手順を、画像付きでわかりやすく解説します。 iCloudからメッセージを削除する方法 iCloudからメッセージを削除するには、iPhoneの「設定」アプリからiCloudストレージ
-
Game Centerからゲームを削除する方法|連携解除・データ削除の手順を解説
Game Centerは、Appleが提供するゲーミングサービスで、すべてのAppleユーザーが利用できます。Game Centerでは、他のプレイヤーと一緒にさまざまなオンラインゲームを楽しめるほか、マルチプレイ機能を使えば友人とオンラインで対戦・協力しながら、より充実したゲーム体験が可能です。本記事では、Game Centerからゲームを削除する方法や、ゲームとの連携を解除する方法、さらに実績(アチーブメント)の削除方法まで、手順を詳しく解説します。 Game Centerからゲームを削除する方法 iPhoneに保存されたゲームは、iPhoneのストレージから削除することで、Game C