パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C++ multisetの使い方



multisetとは(setとの違い)?

  • setと同じ順序付き集合ですが、重複を許すという点でsetと異なります
  • 基本的な使い方はsetと同じです。
  • よく確率の問題で「袋に青玉を○個入れて、白玉を□個出したときに残りの玉の数は?」というのがありますが、そういうのとかに使えます。
  • 参考(公式ドキュメント):multiset - cpprefjp C++日本語リファレンス


宣言

  • #include <set>をして、
std::multiset<型名> mst;

と宣言します。宣言と同時に初期化したいときは、{}で括って

std::multiset<int> mst{ 3, 4, 2, 3 };

という風にします。


for文での表示

ソースコード

#include <iostream>
#include <set>

int main() {
    std::multiset<int> mst{ 3, 4, 2, 3 };

    //表示
    std::cout << "mst = { ";
    for(auto v: mst) {
        std::cout << v << ", ";
    }
    puts("}");

    return 0;
}

実行結果

  • 重複は許すので3が2つ表示されます(setの場合は「st = { 2, 3, 4, }」と3が1つしか表示されません)
mst = { 2, 3, 3, 4, }





要素数の取得(size)

ソースコード

#include <iostream>
#include <set>

int main() {
    std::multiset<int> mst{ 3, 4, 2, 3 };

    std::cout << "要素数:" << mst.size() << std::endl;
}

実行結果

mst = { 2, 3, 4, }





追加(insert)

ソースコード

#include <iostream>
#include <set>

int main() {
    std::multiset<int> mst{ 3, 4, 2, 3 };

    //8を追加
    mst.insert(8);

    // 表示
    std::cout << "mst = { ";
    for(auto v: mst){
        std::cout << v << ", ";
    }
    puts("}");

    return 0;
}

実行結果

mst = { 2, 3, 3, 4, 8, }





要素の存在を確かめる(find)

  • find(検索したい要素)をして、multisetの終端イテレータと一致しなければ存在すると評価されます。

ソースコード

#include <iostream>
#include <set>

int main() {
    std::multiset<int> mst{ 3, 4, 2, 3 };

    //nがあるか調べる
    int n = 3;
    if (mst.find(n) != mst.end()) {
        std::cout << "n = " << n << "が存在" << std::endl;
    }
    else {
        std::cout << "n = " << n << "がない" << std::endl;
    }
}

実行結果

  • n = 5とすれば「n = 5がない」と出てきます。
n = 3が存在





要素の削除(erase)

  • erase(値x)で含まれる全ての値xを削除できます。
  • erase(イテレータite)で該当する単一の要素を削除できます。

ソースコード

#include <iostream>
#include <set>

int main() {
    std::multiset<int> mst{ 3, 3, 5, 6, 6, 7 };

    // 「3」を全削除
    mst.erase(3);

    // 「6」を1つだけ削除(イテレータ使用)
    auto ite = mst.find(6);
    mst.erase(ite);

    //表示
    std::cout << "mst = { ";
    for(auto v: mst) {
        std::cout << v << ", ";
    }
    puts("}");
}

実行結果

mst = { 5, 6, }