std::flat_set<Key,Compare,KeyContainer>:: equal_range
|
std::
pair
<
iterator, iterator
>
equal_range
(
const
Key
&
key
)
;
|
(1) |
(desde C++23)
(constexpr desde C++26) |
|
std::
pair
<
const_iterator, const_iterator
>
equal_range ( const Key & key ) const ; |
(2) |
(desde C++23)
(constexpr desde C++26) |
|
template
<
class
K
>
std:: pair < iterator, iterator > equal_range ( const K & x ) ; |
(3) |
(desde C++23)
(constexpr desde C++26) |
|
template
<
class
K
>
std::
pair
<
const_iterator, const_iterator
>
|
(4) |
(desde C++23)
(constexpr desde C++26) |
Devuelve un rango que contiene todos los elementos con la clave dada en el contenedor. El rango está definido por dos iteradores, uno apuntando al primer elemento que no es menor que la clave dada y otro apuntando al primer elemento mayor que la clave dada.
Alternativamente, el primer iterador puede obtenerse con lower_bound() , y el segundo con upper_bound() .
Compare
es
transparent
. Permite llamar a esta función sin construir una instancia de
Key
.
ContenidosParámetros
Valor de retornostd::pair que contiene un par de iteradores que definen el rango deseado:
ComplejidadLogarítmico en el tamaño del contenedor. EjemploEjecutar este código #include <flat_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::flat_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");
}
Salida: 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
Véase también
|