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

履歴 編集

function
<flat_set>

# std::flat_multiset::contains(C++23)

    bool contains(const key_type& x) const;           // (1) C++23
    constexpr bool contains(const key_type& x) const; // (1) C++26

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

## 概要

指定されたキー`x`に一致する要素がコンテナに含まれているかを判定する。

- (1) : クラスのテンプレートパラメータ`key_type`型のキーを受け取る
- (2) : `key_type`と比較可能な`K`型のキーを受け取る

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

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

## 戻り値

以下と等価：

    return find(x) != end();

## 計算量

対数時間

## 備考

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

## 例

    #include <flat_set>
    #include <iostream>

    int main()
    {
      std::flat_multiset<int> fs = {3, 1, 4, 1};

      // キー3の要素が含まれているか
      if (fs.contains(3)) {
        std::cout << "contain" << std::endl;
      }
      else {
        std::cout << "doesn't contain" << std::endl;
      }
    }

### 出力

    contain

## バージョン

### 言語

- C++23

### 処理系

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

## 参照

- P3372R3 constexpr containers and adaptors