Spec-Zone.ru › C++

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

iterator find( const Key& key );
(1)
const_iterator find( const Key& key ) const;
(2)
template< class K >
iterator find( const K& x );
(3) (начиная с C++14)
template< class K >
const_iterator find( const K& x ) const;
(4) (начиная с C++14)
1,2) Находит элемент с ключом, эквивалентным key.
3,4) Находит элемент с ключом, который при сравнении эквивалентен значению x. Эта перегрузка участвует в разрешении перегрузки, только если квалифицированный идентификатор Compare::is_transparent допустим и обозначает тип. Это позволяет вызывать эту функцию без создания экземпляра Key.

Параметры

key - значение ключа элемента, который требуется найти
x - значение любого типа, которое можно сравнить с ключом с использованием прозрачного компаратора

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

Итератор на требуемый элемент. Если такой элемент не найден, возвращается итератор за последним элементом (см. end()).

Сложность

Логарифмическая относительно размера контейнера.

Примечания

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_generic_associative_lookup 201304L (C++14) Поиск с гетерогенным сравнением в ассоциативных контейнерах; перегрузки (3,4)

Пример

#include <iostream>
#include <set>

struct LightKey
{
    int x;
};

struct FatKey
{
    int x;
    int data[1000]; // a heavy blob
};

// As detailed above, the container must use std::less<> (or other transparent
// Comparator) to access these overloads. This includes standard overloads,
// such as comparison between std::string and std::string_view.
bool operator<(const FatKey& fk, const LightKey& lk) { return fk.x < lk.x; }
bool operator<(const LightKey& lk, const FatKey& fk) { return lk.x < fk.x; }
bool operator<(const FatKey& fk1, const FatKey& fk2) { return fk1.x < fk2.x; }

int main()
{
    // Simple comparison demo.
    std::set<int> example{1, 2, 3, 4};

    if (auto search = example.find(2); search != example.end())
        std::cout << "Found " << (*search) << '\n';
    else
        std::cout << "Not found\n";

    // Transparent comparison demo.
    std::set<FatKey, std::less<>> example2{{1, {}}, {2, {}}, {3, {}}, {4, {}}};

    LightKey lk = {2};
    if (auto search = example2.find(lk); search != example2.end())
        std::cout << "Found " << search->x << '\n';
    else
        std::cout << "Not found\n";
}

Вывод:

Found 2
Found 2

См. также

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

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

Spec-Zone.ru

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