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

C++で値を指定してセット(set)から要素を削除する方法


この記事では、C++のset(セット)から、削除したい値を引数として渡すことで特定の要素を削除する方法を解説します。例えば、{10, 20, 30, 50, 60, 80, 90, 100, 120, 200, 500} というセットから 90 を削除したい場合、結果は {10, 20, 30, 50, 60, 80, 100, 120, 200, 500} となります。

set の各要素は重複して格納することができず、常にソートされた順序で管理されます。また、一度追加された要素の値は変更できない(イミュータブルである)という特徴があります。ただし、要素の追加や削除自体は自由に行うことが可能です。

要素を削除するには、erase() メソッドを使用します。削除したい値を引数に渡すだけで、該当する要素をセットから簡単に取り除くことができます。

サンプルコード

#include<iostream>
#include<set>
using namespace std;
void dispSet(set<int> myset) {
   set<int>::iterator it;
   for (it = myset.begin(); it != myset.end(); ++it)
   cout << ' ' << *it;
   cout << '\n';
}
void deleteUsingValue(set<int> myset, int del_element) {
   cout << "Set before deletion:";
   dispSet(myset);
   myset.erase(del_element);
   cout << "Set after deleting "<< del_element<< ": ";
   dispSet(myset);
}
int main() {
   set<int> tempSet;
   int arr[] = {10, 20, 30, 50, 60, 80, 90, 100, 120, 200, 500};
   int n = sizeof(arr)/sizeof(arr[0]);
   for (int i = 0; i < n; i++)
   tempSet.insert(arr[i]);
   int del_element = 90;
   deleteUsingValue(tempSet, del_element);
}

実行結果

Set before deletion: 10 20 30 50 60 80 90 100 120 200 500
Set after deleting 90: 10 20 30 50 60 80 100 120 200 500

コードの解説

このサンプルコードでは、まず dispSet() 関数を使ってセットの内容を表示し、deleteUsingValue() 関数の中で erase(del_element) を呼び出して、指定した値の要素を削除しています。削除前と削除後のセットの状態を出力することで、erase() の動作を視覚的に確認できます。

なお、erase() メソッドは削除した要素の個数を戻り値として返します。set では要素が重複しないため、値を指定して削除する場合の戻り値は、要素が存在しない場合は 0、削除に成功した場合は 1 のいずれかになります。この性質を利用すれば、削除が成功したかどうかの判定も簡単に行えます。


  1. Redisのセットから要素を削除する方法 – SPOP・SREMコマンドの使い方

    このチュートリアルでは、Redisに保存されたセット(Set)型の値から要素を削除する方法を、SPOPコマンドとSREMコマンドの2つのコマンドを使って解説します。 SPOPコマンドとは SPOPコマンドは、指定したキーに保存されているセットから、1つ以上のランダムな要素を取り除き、その要素を返します。順序が保証されないランダムな削除を行いたい場合に便利なコマンドです。 構文: redis host:port> SPOP <keyname> [count] countには、セットから削除する要素の合計数を指定します。省略した場合は1つの要素だけが削除されます。 戻り値 - (

  2. Redis ZREMコマンドの使い方 – ソート済みセットから要素を削除する方法

    このチュートリアルでは、Redisに保存されたソート済みセット(Sorted Set)の値から、指定した1つ以上の要素を削除する方法を解説します。この操作には、redis-cli上でZREMコマンドを使用します。 ZREMコマンドは、指定したキーに格納されているソート済みセットから、1つ以上の指定されたメンバーを削除します。ソート済みセット内に存在しないメンバーが指定された場合は、そのメンバーは単純に無視されます。また、キーは存在するものの、そのキーに格納されている値がソート済みセット型ではない場合には、エラーが返されます。 構文 redis host:port> ZREM <ke