Spec-Zone.ru › C++

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

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 - альтернативное значение для сравнения с ключами

Возвращаемое значение

Количество элементов, ключи которых эквивалентны key или x; для перегрузки (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";
        // 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.

См. также

find
находит элемент с указанным ключом
(открытая функция-член)
equal_range
возвращает диапазон элементов, соответствующих указанному ключу
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/set/count

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API