LoginSignup
0
0

【勉強用まとめ】C++のsetについて

Last updated at Posted at 2024-04-09

本記事の目的

AtCoder Beginner Contest 347に取り組んでいた際に行き詰ってしまい、解説を読んだところ、私の知らないsetなるものを使って解くことが推奨されていたので、調べてみました。
以下はその学習のまとめです。

setとは

setは重複を許さず(一意性)、昇順にデータを格納するデータ構造です。

#include <iostream>
#include <set>

int main() {
    // 空のsetを作成
    std::set<int> mySet;

    // 要素を追加
    mySet.insert(30);
    mySet.insert(10);
    mySet.insert(50);
    mySet.insert(20);
    mySet.insert(40);
    mySet.insert(10);  // 重複するため無視される

    // 要素をループして出力
    std::cout << "Setの要素:";
    for (auto it = mySet.begin(); it != mySet.end(); ++it) {
        std::cout << " " << *it;
    }
    std::cout << std::endl;

    return 0;
}

実行結果

Setの要素: 10 20 30 40 50

setの使い方

setの宣言

#include <set>

このようにしてヘッダーファイルを読み込んで

std::set<型名> mySet;

のようにして宣言することができます。<>内の型名は格納するデータの型名を入力します。

setの初期化
setは、std::initializer_listを使った方法や、{}を使った方法で初期化が可能です。

std::set<int> empty;  // 空のstd::set
std::set<int> mySet{ 5, 1, 2, 4, 1 };  // {}を使った方法で初期化

要素の追加、削除、変更、検索

mySet.insert(追加する要素);  // 要素の追加
mySet.erase(削除する要素);  // 要素の削除

// 要素の変更(setでは要素の値を直接変更することはできないので、削除して再挿入する)
int old_value = 40;
int new_value = 45;
mySet.erase(old_value);
mySet.insert(new_value);

// 要素の検索(指定した要素が存在するか確認する)
int target = 30;
auto it = mySet.find(target);  // targetがmySetに存在しない場合、itにはmySet.end()が返される
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0