• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <flat_map>

    std::flat_multimap::count

    size_type count(const key_type& x) const; // (1) C++23
    
    template <class K>
    size_type count(const K& x) const;        // (2) C++23
    

    概要

    キー x を検索し、コンテナ内に見つかった要素の数を返す。

    • (1) : クラスのテンプレートパラメータkey_type型のキー x を受け取って、x と等価なキーを持つ要素の数を取得する。
    • (2) : key_typeと比較可能なK型のキー x を受け取って、xと等価なキーを持つ要素の数を取得する。

    テンプレートパラメータ制約

    • (2) : key_compare::is_transparentが妥当な式であること

    戻り値

    • (1) : xと等価なキーの要素数を返す。
    • (2) : key_compare型の関数オブジェクトをc、コンテナ内の各要素が持つキーをkとして、キーが等価か判定する式!c(k, x) && !c(x, k)trueとなる要素の数を返す。

    計算量

    log(size()) + count(x)
    

    備考

    • (2) :
      • is_transparentは、標準ライブラリのstd::lessstd::greaterといった関数オブジェクトの、voidに対する特殊化で定義される。それ以外のテンプレートパラメータでis_transparentが定義されないのは、互換性のためである。
      • これらのオーバーロードは、flat_multimap<string, int>のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。

    #include <flat_map>
    #include <iostream>
    #include <string>
    
    int main()
    {
      // (1)
      {
        std::flat_multimap<std::string, int> fm = {
          {"Alice", 3},
          {"Bob",   1},
          {"Carol", 4}
        };
    
        std::cout << fm.count("Bob") << std::endl;
      }
    
      // (2)
      {
        std::flat_multimap<std::string, int, std::less<>> fm = {
          {"Alice", 3},
          {"Bob",   1},
          {"Carol", 4}
        };
    
        // std::lessのvoidに対する特殊化を使用することで、
        // 文字列リテラルをcount()関数の引数として渡した際に、
        // std::string型の一時オブジェクトが生成されない。
        std::cout << fm.count("Bob") << std::endl;
      }
    }
    

    出力

    1
    1
    

    バージョン

    言語

    • C++23

    処理系

    関連項目