Namespaces
Variants

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

From cppreference.net

iterator find ( const Key & key ) ;
(1) (seit C++11)
(constexpr seit C++26)
const_iterator find ( const Key & key ) const ;
(2) (seit C++11)
(constexpr seit C++26)
template < class K >
iterator find ( const K & x ) ;
(3) (seit C++20)
(constexpr seit C++26)
template < class K >
const_iterator find ( const K & x ) const ;
(4) (seit C++20)
(constexpr seit C++26)
1,2) Findet ein Element mit einem Schlüssel, der äquivalent zu key ist.
3,4) Findet ein Element mit einem Schlüssel, der äquivalent zu x vergleicht.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn Hash und KeyEqual beide transparent sind. Dies setzt voraus, dass ein solcher Hash sowohl mit dem K - als auch mit dem Key -Typ aufrufbar ist und dass der KeyEqual transparent ist, was zusammen den Aufruf dieser Funktion ermöglicht, ohne eine Instanz von Key zu konstruieren.

Inhaltsverzeichnis

Parameter

key - Schlüsselwert des zu suchenden Elements
x - ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann

Rückgabewert

Ein Iterator zum angeforderten Element. Wenn kein solches Element gefunden wird, wird ein past-the-end-Iterator (siehe end() ) zurückgegeben.

Komplexität

Konstant im Durchschnitt, im schlimmsten Fall linear in der Größe des Containers.

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_generic_unordered_lookup 201811L (C++20) Heterogener Vergleichslookup in ungeordneten assoziativen Containern ; Überladungen ( 3,4 )

Beispiel

#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()
{
    // einfache Vergleichs-Demo
    std::unordered_map<int, char> example{{1, 'a'}, {2, 'b'}};
    if (auto search = example.find(2); search != example.end())
        std::cout << "Gefunden " << search->first << ' ' << search->second << '\n';
    else
        std::cout << "Nicht gefunden\n";
    // C++20 Demo: Heterogenes Lookup für ungeordnete Container (transparentes Hashing)
    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';
}

Ausgabe:

Found 2 b
true
true
true

Siehe auch

Zugriff auf bestimmtes Element mit Bereichsprüfung
(öffentliche Elementfunktion)
Zugriff auf oder Einfügen eines bestimmten Elements
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)
gibt den Bereich der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion)