Ce face std::equal_range
std::equal_range face într-un singur apel ce fac lower_bound și upper_bound: returnează o pereche {prim, ultim}. Elementele egale cu valoarea sunt exact cele din [prim, ultim).
Dacă valoarea nu există, cei doi iteratori sunt egali și arată locul unde ar trebui inserată.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Interval sortat. |
valoare |
Valoarea căutată. |
Ce returnează
std::pair de iteratori.
Exemple
Exemplul 1: Toate notele de 8
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> note{5, 6, 8, 8, 8, 9, 10};
auto [prim, ultim] = std::equal_range(note.begin(), note.end(), 8);
std::println("Nota 8 apare de {} ori, de la poziția {}", ultim - prim, prim - note.begin());
auto [a, b] = std::equal_range(note.begin(), note.end(), 7);
std::println("Nota 7: {} apariții, s-ar insera la poziția {}", b - a, a - note.begin());
}
Rezultat
Nota 8 apare de 3 ori, de la poziția 2
Nota 7: 0 apariții, s-ar insera la poziția 2
Exemplul 2: Cuvinte după lungime
Vectorul este sortat după lungime, iar comparatorul compară lungimi. std::ranges::equal_range folosește proiecția size.
#include <algorithm>
#include <print>
#include <ranges>
#include <string>
#include <vector>
int main() {
std::vector<std::string> cuvinte{"ac", "pom", "nor", "lac", "carte", "fereastră"};
auto gasite = std::ranges::equal_range(cuvinte, 3, {}, &std::string::size);
for (const auto& c : gasite) {
std::print("{} ", c);
}
std::println("");
}
Rezultat
pom nor lac
Greșeli frecvente
- Folosești
equal_rangepe unstd::multimapcu funcția din<algorithm>. Containerul are propria metodăequal_range, mult mai rapidă.
Comenzi înrudite
std::lower_bound: Într-un interval sortat, găsește primul element ≥ valoare (lower_bound) sau primul element > valoare (upper_bound).std::binary_search: Verifică foarte rapid dacă o valoare există într-un interval deja sortat.std::count: Numără de câte ori apare o valoare (count) sau câte elemente îndeplinesc o condiție (count_if).