Ce face std::map::lower_bound
Pentru că un map este sortat, poți căuta nu doar o cheie exactă, ci și „locul” unei chei. lower_bound(k) returnează iteratorul primului element cu cheia >= k, iar upper_bound(k) pe al primului cu cheia > k. Dacă nu există un astfel de element, returnează end().
Împreună dau intervale: elementele cu cheile între a și b (inclusiv) sunt în [lower_bound(a), upper_bound(b)). Funcționează la fel pentru std::set, std::multimap și std::multiset.
Parametri
| Parametru | Descriere |
|---|---|
cheie |
Valoarea de comparat cu cheile. |
Ce returnează
Un iterator (sau end()).
Exemple
Exemplul 1: Comenzile dintr-un interval de date
Datele scrise ca text AAAA-LL-ZZ se sortează corect alfabetic.
#include <map>
#include <print>
#include <string>
int main() {
std::map<std::string, int> comenzi{
{"2025-03-02", 120}, {"2025-03-05", 80}, {"2025-03-09", 300},
{"2025-03-15", 45}, {"2025-03-21", 210},
};
auto prim = comenzi.lower_bound("2025-03-05");
auto ultim = comenzi.upper_bound("2025-03-15");
int total = 0;
for (auto it = prim; it != ultim; ++it) {
std::println("{}: {} lei", it->first, it->second);
total += it->second;
}
std::println("Total 5-15 martie: {} lei", total);
}
Rezultat
2025-03-05: 80 lei
2025-03-09: 300 lei
2025-03-15: 45 lei
Total 5-15 martie: 425 lei
Exemplul 2: Tranșe de impozitare: prima limită potrivită
#include <map>
#include <print>
#include <string>
int main() {
// limita superioară a venitului -> categoria
std::map<int, std::string> transe{{3000, "mic"}, {8000, "mediu"}, {20000, "mare"}};
for (int venit : {2500, 3000, 7999, 15000, 50000}) {
auto it = transe.lower_bound(venit);
std::println("{:>6}: {}", venit, it != transe.end() ? it->second : "foarte mare");
}
}
Rezultat
2500: mic
3000: mic
7999: mediu
15000: mare
50000: foarte mare
Greșeli frecvente
- Dereferențiezi rezultatul fără să verifici
end(): dacă toate cheile sunt mai mici,lower_boundreturneazăend(). - Folosești
std::lower_bounddin<algorithm>pe un map. Merge, dar e lent (iteratorii unui map nu sar direct la mijloc); funcția membră folosește arborele și este O(log n).
Comenzi înrudite
std::map::find: find() caută o cheie și returnează un iterator la ea sau end(); count() și contains() spun doar dacă există.std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.std::lower_bound: Într-un interval sortat, găsește primul element ≥ valoare (lower_bound) sau primul element > valoare (upper_bound).