Namensräume
Varianten
Aktionen

std::multimap<Key,T,Compare,Allocator>::find

Von cppreference.com
< cpp‎ | container‎ | multimap
 
 
 
 
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

#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) [edit]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]