std::multimap<Key,T,Compare,Allocator>::find
Von cppreference.com
| iterator find( const Key& key ); |
(1) | |
| const_iterator find( const Key& key ) const; |
(2) | |
template< class K > iterator find( const K& x ); |
(3) | (seit C++14) |
template< class K > const_iterator find( const K& x ) const; |
(4) | (seit C++14) |
1,2) Findet ein Element mit einem Schlüssel, der äquivalent zu key ist. Wenn sich mehrere Elemente mit dem angeforderten Schlüssel im Container befinden, kann jedes von ihnen zurückgegeben werden.
3,4) Sucht nach einem Element mit einem Schlüssel, der mit dem Wert x äquivalent ist. Diese Überladung nimmt nur an der Auflösung von Überladungen teil, wenn der qualifizierte Bezeichner Compare::is_transparent gültig ist und einen Typ bezeichnet. Sie ermöglicht es, diese Funktion aufzurufen, ohne eine Instanz von
Key zu konstruieren.Inhalt |
[bearbeiten] Parameter
| key | - | Schlüsselwert des zu suchenden Elements |
| x | - | ein Wert eines beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann |
[bearbeiten] Rückgabewert
Ein Iterator zu dem angeforderten Element. Wenn kein solches Element gefunden wird, wird der Past-the-end (siehe end()) Iterator zurückgegeben.
[bearbeiten] Komplexität
Logarithmisch zur Größe des Containers.
Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_generic_associative_lookup |
201304L |
(C++14) | Heterogene Schlüsselsuche in assoziativen Containern; Überladungen (3,4) |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <map> 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::multimap<int, char> example{{1, 'a'}, {2, 'b'}}; if (auto search = example.find(2); search != example.end()) std::cout << "Found " << search->first << ' ' << search->second << '\n'; else std::cout << "Not found\n"; // Transparent comparison demo. std::multimap<FatKey, char, std::less<>> example2{{{1, {}}, 'a'}, {{2, {}}, 'b'}}; LightKey lk = {2}; if (auto search = example2.find(lk); search != example2.end()) std::cout << "Found " << search->first.x << ' ' << search->second << '\n'; else std::cout << "Not found\n"; // Obtaining const iterators. // Compiler decides whether to return iterator of (non) const type by way of // accessing map; to prevent intentional modification, one of the simplest // options is to access the map via a constant reference. const auto& example2ref = example2; if (auto search = example2ref.find(lk); search != example2.end()) { std::cout << "Found " << search->first.x << ' ' << search->second << '\n'; // search->second = 'c'; // error: assignment of member // 'std::pair<const FatKey, char>::second' // in read-only object } }
Ausgabe
Found 2 b Found 2 b Found 2 b
[bearbeiten] Siehe auch
| gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen (public member function) | |
| gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen (public member function) |