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

来自cppreference.com
< cpp‎ | container‎ | set

 
 
 
 
size_type count( const Key& key ) const;
(1)
template< class K >
size_type count( const K& x ) const;
(2) (C++14 起)

返回拥有与指定实参比较等价的键的元素数。

1) 返回拥有键 key 的元素数。,因为此容器不允许重复,故只能为 1 或 0。
2) 返回拥有比较等价于值 x 的键的元素数。此重载只有在有限定标识 Compare::is_transparent 合法且指代一个类型时才会参与重载决议。这允许调用此函数而不构造 Key 的实例。

参数

key - 要计量元素数的键值
x - 要与键比较的替用值

返回值

拥有比较等价于 keyx 的键的元素数,对于 (1) 为 1 或 0。

复杂度

与容器大小成对数,加上与找到的元素数成线性。

注解

功能特性测试 标准 功能特性
__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<(S const& s) const { return x < s.x; }
};
 
struct R
{
    int x;
    R(int i) : x{i} { std::cout << "R{" << i << "} "; }
    bool operator<(R const& r) const { return x < r.x; }
};
 
bool operator<(R const& r, int i) { return r.x < i; }
bool operator<(int i, R const& 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.

参阅

寻找带有特定键的元素
(公开成员函数)
返回匹配特定键的元素范围
(公开成员函数)