最終更新日時(UTC): 2026年02月17日 14時22分33秒
Akira Takahashi が更新

履歴 編集

function
<flat_map>

# std::flat_multimap::count(C++23)

    size_type
      count(const key_type& x) const; // (1) C++23
    constexpr size_type
      count(const key_type& x) const; // (1) C++26

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

## 概要

キー `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::less`、`std::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

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 関連項目

- `contains()`

## 参照

- P3372R3 constexpr containers and adaptors