命名空间
变体
操作

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等效的键的元素数量。仅当限定 IDCompare::is_transparent 有效且表示一个类型时,此重载才参与重载解析。它允许在不构造 Key 实例的情况下调用此函数。

内容

[编辑] 参数

key - 要统计的元素的键值
x - 与键进行比较的备用值

[编辑] 返回值

keyx等效的键的元素数量,对于重载(1),此数量为 1 或 0。

[编辑] 复杂度

容器大小的对数时间,加上找到的元素数量的线性时间。

说明

功能测试 Std 功能
__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";
        // Two temporary objects S{1} and S{2} were created.
        // Comparison function object is defaulted std::less<S>,
        // which is not transparent (has no is_transparent member type).
 
    std::set<R, std::less<>> r{3, 1, 4, 1, 5};
    std::cout << ": " << r.count(1) << ", " << r.count(2) << ".\n";
        // C++14 heterogeneous lookup; temporary objects were not created.
        // Comparator std::less<void> has predefined 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.

[编辑] 参见

查找具有特定键的元素
(公共成员函数) [编辑]
返回与特定键匹配的元素范围
(公共成员函数) [编辑]