Namespaces
Variants

std::set<Key,Compare,Allocator>:: count

From cppreference.net

size_type count ( const Key & key ) const ;
(1) (constexpr since C++26)
template < class K >
size_type count ( const K & x ) const ;
(2) (C++14以降)
(constexpr since C++26)

指定された引数と等価と比較されるキーを持つ要素の数を返します。

1) キー key を持つ要素の数を返します。キーは常に一意であるため、これは 1 または 0 のいずれかになります。
2) キーが x と等価と比較される要素の数を返します。
このオーバーロードは、 Compare transparent である場合にのみ、オーバーロード解決に参加します。これにより、 Key のインスタンスを構築せずにこの関数を呼び出すことが可能になります。

目次

パラメータ

key - カウントする要素のキー値
x - キーと比較する代替値

戻り値

key または x と等価に比較されるキーを持つ要素の数。

計算量

コンテナのサイズに対して対数的、および見つかった要素の数に対して線形。

注記

機能テスト マクロ 標準 機能
__cpp_lib_generic_associative_lookup 201304L (C++14) 連想コンテナにおける 異種比較ルックアップ ; オーバーロード (2)

#include <functional>
#include <iostream>
#include <set>
struct S
{
    int x;
    S(int i) : x{i} { std::cout << "S{" << i << "} "; }
    bool operator<(const R& s) const { return x < s.x; }
};
struct R
{
    int x;
    R(int i) : x{i} { std::cout << "R{" << i << "} "; }
    bool operator<(const R& r) const { return x < r.x; }
};
bool operator<(const R& r, int i) { return r.x < i; }
bool operator<(int i, const R& r) { return i < r.x; }
int main()
{
    std::set<int> t{3, 1, 4, 1, 5};
    std::cout << t.count(1) << ", " << t.count(2) << ".\n";
    std::set<S> s{3, 1, 4, 1, 5};
    std::cout << ": " << s.count(1) << ", " << s.count(2) << ".\n";
        // 一時オブジェクト S{1} と S{2} が作成されました。
        // 比較関数オブジェクトはデフォルトの std::less<S> であり、
        // 透過的ではありません("is_transparent" ネスト型を持ちません)。
    std::set<R, std::less<>> r{3, 1, 4, 1, 5};
    std::cout << ": " << r.count(1) << ", " << r.count(2) << ".\n";
        // C++14 異種ルックアップ; 一時オブジェクトは作成されませんでした。
        // 比較子 std::less<void> は事前定義された "is_transparent" を持ちます。
}

出力:

1, 0.
S{3} S{1} S{4} S{1} S{5} : S{1} 1, S{2} 0.
R{3} R{1} R{4} R{1} R{5} : 1, 0.

関連項目

特定のキーを持つ要素を検索
(公開メンバ関数)
特定のキーに一致する要素の範囲を返す
(公開メンバ関数)