C++
 Computer >> コンピューター >  >> プログラミング >> C++

【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()) を使うのがシンプルで一般的です。

  1. iCloudからメッセージを削除する方法【iPhone・Mac対応】

    iCloudは、Appleのリモートサーバー上にデータや個人情報を安全に保管するために設計されたクラウドサービスです。メール、メッセージ、写真、動画などをバックアップ・同期できるほか、無料で5GBのデータ容量が提供されます。ただし、5GBではすぐに容量がいっぱいになってしまうことも多く、「iCloudのメッセージを削除したい」と考える方も少なくありません。この記事では、iCloudからメッセージを削除する具体的な手順を、画像付きでわかりやすく解説します。 iCloudからメッセージを削除する方法 iCloudからメッセージを削除するには、iPhoneの「設定」アプリからiCloudストレージ

  2. Game Centerからゲームを削除する方法|連携解除・データ削除の手順を解説

    Game Centerは、Appleが提供するゲーミングサービスで、すべてのAppleユーザーが利用できます。Game Centerでは、他のプレイヤーと一緒にさまざまなオンラインゲームを楽しめるほか、マルチプレイ機能を使えば友人とオンラインで対戦・協力しながら、より充実したゲーム体験が可能です。本記事では、Game Centerからゲームを削除する方法や、ゲームとの連携を解除する方法、さらに実績(アチーブメント)の削除方法まで、手順を詳しく解説します。 Game Centerからゲームを削除する方法 iPhoneに保存されたゲームは、iPhoneのストレージから削除することで、Game C