Namespaces
Variants

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

From de.cppreference.net

std:: pair < iterator, iterator > equal_range ( const Key & key ) ;
(1) (constexpr seit C++26)
std:: pair < const_iterator, const_iterator >
equal_range ( const Key & key ) const ;
(2) (constexpr seit C++26)
template < class K >
std:: pair < iterator, iterator > equal_range ( const K & x ) ;
(3) (seit C++14)
(constexpr seit C++26)
template < class K >

std:: pair < const_iterator, const_iterator >

equal_range ( const K & x ) const ;
(4) (seit C++14)
(constexpr seit C++26)

Gibt einen Bereich zurück, der alle Elemente mit dem angegebenen Schlüssel im Container enthält. Der Bereich wird durch zwei Iteratoren definiert, wobei einer auf das erste Element zeigt, das nicht kleiner als der angegebene Schlüssel ist, und ein anderer auf das erste Element, das größer als der angegebene Schlüssel ist.

Alternativ kann der erste Iterator mit lower_bound() erhalten werden, und der zweite mit upper_bound() .

1,2) Vergleicht die Schlüssel mit key .
3,4) Vergleicht die Schlüssel mit dem Wert x .
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn Compare transparent ist. Sie ermöglicht den Aufruf dieser Funktion ohne Konstruktion einer Instanz von Key .

Inhalt

Parameter

key - Schlüsselwert, mit dem die Elemente verglichen werden
x - alternativer Wert, der mit Key verglichen werden kann

Rückgabewert

std::pair enthält ein Paar von Iteratoren, die den gewünschten Bereich definieren:

  • Der erste Iterator zeigt auf das erste Element, das nicht kleiner als der gegebene Schlüssel ist, oder auf end ( ) falls kein solches Element existiert.
  • Der zweite Iterator zeigt auf das erste Element, das größer als der gegebene Schlüssel ist, oder auf end ( ) falls kein solches Element existiert.

Da emplace und nicht-hint-gestütztes insert immer an der oberen Grenze einfügen, ist die Reihenfolge äquivalenter Elemente im gleichen Bereich die Einfügereihenfolge, es sei denn, hint-gestütztes insert oder emplace_hint wurde verwendet, um ein Element an einer anderen Position einzufügen.

(seit C++11)

Komplexität

Logarithmisch in der Größe des Containers.

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_generic_associative_lookup 201304L (C++14) Heterogener Vergleichslookup in assoziativen Containern , für Überladungen ( 3,4 )

Beispiel

#include <iostream>
#include <set>
template<typename I>
void print_equal_range(I first, I lb, I ub, I last)
{
    for (I i{first}; i != lb; ++i)
        std::cout << *i << ' ';
    std::cout << "[ ";
    for (I i{lb}; i != ub; ++i)
        std::cout << *i << ' ';
    std::cout << ") ";
    for (I i{ub}; i != last; ++i)
        std::cout << *i << ' ';
    std::cout << '\n';
}
int main()
{
    std::multiset<int> c{4, 3, 2, 1, 3, 3};
    std::cout << "c = ";
    print_equal_range(begin(c), begin(c), end(c), end(c));
    for (int key{}; key != 6; ++key)
    {
        std::cout << "key = " << key << "; equal range = ";
        const auto [lb, ub] = c.equal_range(key);
        print_equal_range(begin(c), lb, ub, end(c));
    }
}

Ausgabe:

c = [ 1 2 3 3 3 4 )
key = 0; equal range = [ ) 1 2 3 3 3 4
key = 1; equal range = [ 1 ) 2 3 3 3 4
key = 2; equal range = 1 [ 2 ) 3 3 3 4
key = 3; equal range = 1 2 [ 3 3 3 ) 4
key = 4; equal range = 1 2 3 3 3 [ 4 )
key = 5; equal range = 1 2 3 3 3 4 [ )

Siehe auch

findet Element mit bestimmtem Schlüssel
(öffentliche Elementfunktion)
(C++20)
prüft, ob der Container ein Element mit bestimmtem Schlüssel enthält
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente mit bestimmtem Schlüssel zurück
(öffentliche Elementfunktion)
gibt einen Iterator auf das erste Element zurück, das größer als der angegebene Schlüssel
(öffentliche Elementfunktion)
gibt einen Iterator auf das erste Element zurück, das nicht kleiner als der angegebene Schlüssel
(öffentliche Elementfunktion)
findet den Bereich von Elementen, die dem angegebenen Wert entsprechen, mittels binärer Suche
(Funktionsschablone & Algorithmus-Funktionsobjekt)