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

C++のset(集合)にユーザー定義型を指定する方法

set(セット)は値を格納するためのデータ構造です。setの最大の特徴は、要素が互いに重複しないこと(同じ値を持つ要素が複数存在しないこと)、そして値が自動的に昇順でソートされて保持される点にあります。C++では、setに格納するデータ型を明示的に定義することが可能で、intやstringといった組み込み型だけでなく、ユーザー定義型(構造体やクラス)を指定することもできます。

データを重複なく、かつソートされた状態で保持したい場合にsetは非常に便利です。たとえば次のような動作になります。

Input  : 124689781230
Output : 012346789

ロジック

setへの入力はどのような順序でもよく、重複した値が含まれていても問題ありません。しかし、setには重複しない値だけが格納され、自動的に昇順へと並べ替えられます。

コード例

ユーザー定義型をsetで扱うには、構造体やクラスに比較演算子 operator< をオーバーロードし、要素同士の大小関係(順序付け)を定義する必要があります。以下は、int型のidを持つ構造体Testをsetに格納する例です。

#include<bits/stdc++.h>
using namespace std;
struct Test {
    int id;
    bool operator < (const Test& t) const {
        return (this->id < t.id);
    }
};
int main() {
    Test t1 = { 12 }, t2 = { 45 }, t3 = { 32 }, t4 = { 78 }, t5 = {12}, t6 = {8};
    set<struct Test> s;
    s.insert(t1);
    s.insert(t2);
    s.insert(t3);
    s.insert(t4);
    s.insert(t5);
    s.insert(t6);
    set<struct Test>::iterator it;
    for (it = s.begin(); it != s.end(); it++) {
        cout << (*it).id <<" ";
    }
    return 0;
}

実行結果

8 12 32 45 78

operator< を定義するだけで、独自の構造体やクラスでも通常のsetと同じように扱えるようになります。この例では t5={12} が t1 と重複しているため無視され、idの昇順にソートされた結果が出力されているのがわかります。

  1. LinuxでのC/C++開発におすすめのIDE 6選|特徴と選び方を解説

    テキストエディタだけでは大規模開発は難しい大規模なプロジェクトを単なるテキストエディタだけで管理するのは容易ではありません。そうしたケースでは、IDE(統合開発環境)を活用することで生産性が向上し、ストレスも大幅に軽減されます。IDEにはさまざまな種類があるため、自分のニーズに合ったものを選ぶことが重要です。この記事では、Linuxで利用できるC/C++向けの優れたIDEを6つご紹介します。1. NetBeans(C/C++開発向け)NetBeansは、無料かつオープンソースの人気クロスプラットフォームIDEです。C/C++をはじめ、多くのプログラミング言語に対応しており、コミュニティが開発し

  2. C++のブール型の型指定子とは?bool型の基本と使い方を解説

    C++におけるブール型の型指定子C++で真偽値(ブール値)を扱うための型指定子は bool です。この型は、true(真) または false(偽) の2つの値のみを持つことができます。基本的な宣言方法bool型の変数は、次のように宣言して初期化できます。bool myBoolean = true;また、falseを代入することも可能です。bool isActive = false;bool型の特徴取り得る値:true または false のみ(trueは1、falseは0としても扱われます)サイズ:通常は1バイト(処理系によって異なる場合があります)ヘッダーファイル:C++言語に組み込まれて