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

C++ STLのmultiset::count()関数とは?使い方とコード例を解説


この記事では、C++ STLにおけるmultiset::count()関数の動作、構文、そして具体的な使用例について詳しく解説します。

C++ STLにおけるmultiset(マルチセット)とは?

multisetは、setコンテナとよく似た連想コンテナの一つです。setと同様に、値をキーの形式で格納し、常にソートされた特定の順序で要素を保持するという特徴があります。

multisetでも、setと同じように各値はキーとして識別されます。両者の最大の違いは、setは重複しない一意なキー(同じキーが2つ以上存在できない)しか持てないのに対し、multisetは同じ値のキーを複数個格納できるという点です。

内部的には、multisetのキーは二分探索木(通常は赤黒木)によって実装されており、効率的な検索が可能になっています。

multiset::count()とは?

multiset::count()関数は、C++ STLに標準で組み込まれている関数で、<set>ヘッダーファイル内で定義されています。

この関数は、指定したキーと一致する要素の個数を数えるために使用されます。

multisetは同じキーの値を複数保持できるため、「あるキーがコンテナ内にいくつ含まれているか」を知りたい場合にcount()が役立ちます。count()はコンテナ全体を対象にキーを検索し、その結果を返します。もし探しているキーがコンテナ内に存在しない場合は、0を返します。

なお、計算量はO(log n + k)(nは要素数、kは一致する要素数)であり、非常に効率的に動作します。

構文

ms_name.count(value_type T);

パラメータ

この関数は、multisetのvalue_type(要素の型)と同じ型の引数を1つ受け取ります。この引数には、対象のmultisetコンテナ内で検索したい値を指定します。

戻り値

指定したキーと同じ値を持つ要素の個数を返します。

使用例

入力: std::multiset<int> mymultiset = {1, 2, 2, 3, 2, 4};
    mymultiset.count(2);
出力: 3

上記の例では、multiset内に値「2」が3つ格納されているため、count(2)は3を返します。

サンプルコード①

#include <bits/stdc++.h>
using namespace std;
int main() {
    int arr[] = {1, 2, 3, 1, 1, 1};
    multiset<int> check(arr, arr + 6);
    cout<<"List is : ";
    for (auto i = check.begin(); i != check.end(); i++)
        cout << *i << " ";
    cout << "\n1 is occuring: "<<check.count(1)<<" times";
    return 0;
}

出力

上記のコードを実行すると、次のような出力が生成されます。

List is : 1 1 1 1 2 3
1 is occuring 4 times

配列の初期化時に渡した順序に関係なく、multisetは自動的に要素をソートして格納するため、出力では「1」が先頭に4つ並んでいます。count(1)の呼び出しにより、値「1」の出現回数である4が正しく取得できています。

サンプルコード②

#include <bits/stdc++.h>
using namespace std;
int main() {
    int arr[] = {1, 2, 3, 1, 1, 1, 2, 2};
    multiset<int> check(arr, arr + 8);
    cout<<"List is : ";
    for (auto i = check.begin(); i != check.end(); i++)
    cout << *i << " ";
    cout << "\n1 is occuring: "<<check.count(1)<<" times";
    cout << "\n2 is occuring: "<<check.count(2)<<" times";
    return 0;
}

出力

上記のコードを実行すると、次のような出力が生成されます。

List is : 1 1 1 1 2 2 2 3
1 is occuring 4 times
2 is occuring 3 times

この例では、同じmultisetオブジェクトに対してcount()を複数回呼び出し、それぞれ異なるキー(1と2)の出現回数を取得しています。このように、multiset::count()を使えば、重複を許すコンテナ内の任意の値の出現回数を簡単に調べることができます。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. C++ STLのsinh()関数の使い方を徹底解説

    sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin