Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | set
 
 
 
 
std::pair<iterator, iterator> equal_range( const Key& key );
(1)
std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const;
(2)
template< class K >
std::pair<iterator, iterator> equal_range( const K& x );
(3) (seit C++14)
template< class K >
std::pair<const_iterator, const_iterator> equal_range( const K& x ) const;
(4) (seit C++14)

Gibt einen Bereich zurück, der alle Elemente mit dem gegebenen Schlüssel im Container enthält. Der Bereich wird durch zwei Iteratoren definiert, von denen einer auf das erste Element zeigt, das nicht kleiner als key ist, und der andere auf das erste Element zeigt, das größer als key ist. Alternativ kann der erste Iterator mit lower_bound() und der zweite mit upper_bound() ermittelt werden.

1,2) Vergleicht die Schlüssel mit key.
3,4) Vergleicht die Schlüssel mit dem Wert x. Diese Überladung nimmt an der Overload-Auflösung teil, nur 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 - key Wert, mit dem die Elemente verglichen werden
x - alternativer Wert, der mit Key verglichen werden kann

[bearbeiten] Rückgabewert

std::pair, das ein Paar von Iteratoren enthält, die den gewünschten Bereich definieren: Der erste zeigt auf das erste Element, das nicht kleiner als key ist, und der zweite zeigt auf das erste Element, das größer als key ist.

Wenn keine Elemente vorhanden sind, die nicht kleiner als key sind, wird der past-the-end (siehe end()) Iterator als erstes Element zurückgegeben. In ähnlicher Weise wird, wenn keine Elemente vorhanden sind, die größer als key sind, der past-the-end Iterator als zweites Element 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 Vergleichssuche in assoziativen Containern, für Überladungen (3,4)

[bearbeiten] Beispiel

#include <set>
#include <functional>
#include <print>
#include <ranges>
#include <string>
#include <string_view>
#include <tuple>
 
struct Names
{
    std::string forename, surname;
    friend auto operator<(const Names& lhs, const Names& rhs)
    {
        return std::tie(lhs.surname, lhs.forename) < std::tie(rhs.surname, rhs.forename);
    }
};
 
struct SurnameCompare
{
    std::string_view surname;
 
    friend bool operator<(const Names& lhs, const SurnameCompare& rhs)
    {
        return lhs.surname < rhs.surname;
    }
 
    friend bool operator<(const SurnameCompare& lhs, const Names& rhs)
    {
        return lhs.surname < rhs.surname;
    }
}; 
 
std::set<Names, std::less<>> characters
{
    {"Homer", "Simpson"},
    {"Marge", "Simpson"},
    {"Lisa", "Simpson"},
    {"Ned", "Flanders"},
    {"Joe", "Quimby"}
};
 
void print_unique(const Names& names)
{
    auto [begin, end] = characters.equal_range(names);
    std::print(
        "Found {} characters with name \"{} {}\"\n", 
        std::distance(begin, end), 
        names.forename, names.surname
    );
}
 
void print_by_surname(std::string_view surname)
{
    auto [begin, end] = characters.equal_range(SurnameCompare{surname});
    std::print("Found {} characters with surname \"{}\":\n", std::distance(begin, end), surname);
    for (const Names& names : std::ranges::subrange(begin, end))
        std::print("    {} {}\n", names.forename, names.surname);
}
 
int main()
{
    print_unique({"Maude", "Flanders"});
    print_unique({"Lisa", "Simpson"});
    print_by_surname("Simpson");
}

Ausgabe

Found 0 characters with name "Maude Flanders"
Found 1 characters with name "Lisa Simpson"
Found 3 characters with surname "Simpson":
    Homer Simpson
    Lisa Simpson
    Marge Simpson

[bearbeiten] Siehe auch

sucht ein Element mit einem bestimmten Schlüssel
(public member function) [edit]
(C++20)
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält
(public member function) [edit]
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *größer* als der gegebene Schlüssel ist
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *nicht kleiner* als der gegebene Schlüssel ist
(public member function) [edit]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(Funktionstemplate) [edit]