Namespaces
Variants

std::unordered_map<Key,T,Hash,KeyEqual,Allocator>:: find

From cppreference.net

iterator find ( const Key & key ) ;
(1) (depuis C++11)
(constexpr depuis C++26)
const_iterator find ( const Key & key ) const ;
(2) (depuis C++11)
(constexpr depuis C++26)
template < class K >
iterator find ( const K & x ) ;
(3) (depuis C++20)
(constexpr depuis C++26)
template < class K >
const_iterator find ( const K & x ) const ;
(4) (depuis C++20)
(constexpr depuis C++26)
1,2) Trouve un élément dont la clé est équivalente à key .
3,4) Trouve un élément dont la clé est équivalente à x .
Cette surcharge participe à la résolution de surcharge seulement si Hash et KeyEqual sont tous deux transparents . Cela suppose qu'un tel Hash peut être appelé avec les types K et Key , et que le KeyEqual est transparent, ce qui, ensemble, permet d'appeler cette fonction sans construire une instance de Key .

Table des matières

Paramètres

key - valeur clé de l'élément à rechercher
x - une valeur de type quelconque pouvant être comparée de manière transparente avec une clé

Valeur de retour

Un itérateur vers l'élément demandé. Si aucun élément correspondant n'est trouvé, un itérateur past-the-end (voir end() ) est retourné.

Complexité

Constant en moyenne, linéaire dans le pire cas selon la taille du conteneur.

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_generic_unordered_lookup 201811L (C++20) Recherche de comparaison hétérogène dans les conteneurs associatifs non ordonnés ; surcharges ( 3,4 )

Exemple

#include <cstddef>
#include <functional>
#include <iostream>
#include <string>
#include <string_view>
#include <unordered_map>
using namespace std::literals;
struct string_hash
{
    using hash_type = std::hash<std::string_view>;
    using is_transparent = void;
    std::size_t operator()(const char* str) const        { return hash_type{}(str); }
    std::size_t operator()(std::string_view str) const   { return hash_type{}(str); }
    std::size_t operator()(const std::string& str) const { return hash_type{}(str); }
};
int main()
{
    // démonstration simple de comparaison
    std::unordered_map<int, char> example{{1, 'a'}, {2, 'b'}};
    if (auto search = example.find(2); search != example.end())
        std::cout << "Trouvé " << search->first << ' ' << search->second << '\n';
    else
        std::cout << "Non trouvé\n";
    // Démonstration C++20 : Recherche hétérogène pour conteneurs non ordonnés (hachage transparent)
    std::unordered_map<std::string, size_t, string_hash, std::equal_to<>> map{{"one"s, 1}};
    std::cout << std::boolalpha
        << (map.find("one")   != map.end()) << '\n'
        << (map.find("one"s)  != map.end()) << '\n'
        << (map.find("one"sv) != map.end()) << '\n';
}

Sortie :

Trouvé 2 b
true
true
true

Voir aussi

accéder à l'élément spécifié avec vérification des limites
(fonction membre publique)
accéder ou insérer l'élément spécifié
(fonction membre publique)
retourne le nombre d'éléments correspondant à une clé spécifique
(fonction membre publique)
retourne la plage d'éléments correspondant à une clé spécifique
(fonction membre publique)