std::set<Key,Compare,Allocator>:: equal_range
|
std::
pair
<
iterator, iterator
>
equal_range
(
const
Key
&
key
)
;
|
(1) | (constexpr depuis C++26) |
|
std::
pair
<
const_iterator, const_iterator
>
equal_range ( const Key & key ) const ; |
(2) | (constexpr depuis C++26) |
|
template
<
class
K
>
std:: pair < iterator, iterator > equal_range ( const K & x ) ; |
(3) |
(depuis C++14)
(constexpr depuis C++26) |
|
template
<
class
K
>
std::
pair
<
const_iterator, const_iterator
>
|
(4) |
(depuis C++14)
(constexpr depuis C++26) |
Retourne une plage contenant tous les éléments avec la clé donnée dans le conteneur. La plage est définie par deux itérateurs, l'un pointant vers le premier élément qui n'est pas inférieur à la clé donnée et l'autre pointant vers le premier élément supérieur à la clé donnée.
Alternativement, le premier itérateur peut être obtenu avec lower_bound() , et le second avec upper_bound() .
Compare
est
transparent
. Elle permet d'appeler cette fonction sans construire une instance de
Key
.
ContenuParamètres
Valeur de retourstd::pair contenant une paire d'itérateurs définissant la plage souhaitée :
ComplexitéLogarithmique par rapport à la taille du conteneur. Notes
ExempleExécuter ce code #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::println(
"Found {} characters with name \"{} {}\"",
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::println("Found {} characters with surname \"{}\":", std::distance(begin, end), surname);
for (const Names& names : std::ranges::subrange(begin, end))
std::println(" {} {}", names.forename, names.surname);
}
int main()
{
print_unique({"Maude", "Flanders"});
print_unique({"Lisa", "Simpson"});
print_by_surname("Simpson");
}
Sortie :\n 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
Voir aussi
|