Ce face std::map::at
m.at(cheie) returnează o referință la valoarea cheii. Dacă cheia lipsește, nu o creează (cum face operator[]), ci aruncă std::out_of_range.
Merge și pe un map const, deci este alegerea potrivită în funcțiile care primesc const std::map<...>&.
Parametri
| Parametru | Descriere |
|---|---|
cheie |
Cheia căutată. |
Ce returnează
O referință la valoarea asociată cheii.
Exemple
Exemplul 1: Citire sigură dintr-un map constant
Textul din what() depinde de bibliotecă.
#include <map>
#include <print>
#include <stdexcept>
#include <string>
double pret(const std::map<std::string, double>& meniu, const std::string& produs) {
return meniu.at(produs); // operator[] nu ar compila aici
}
int main() {
const std::map<std::string, double> meniu{{"ciorbă", 18.0}, {"sarmale", 32.5}};
std::println("Sarmale: {} lei", pret(meniu, "sarmale"));
try {
std::println("Pizza: {} lei", pret(meniu, "pizza"));
} catch (const std::out_of_range& e) {
std::println("Nu avem pizza ({})", e.what());
}
std::println("Produse în meniu: {}", meniu.size());
}
Rezultat
Sarmale: 32.5 lei
Nu avem pizza (map::at: key not found)
Produse în meniu: 2
Greșeli frecvente
- Folosești
atși nu prinzi excepția: dacă cheia lipsește, programul se oprește cuterminate. Prindestd::out_of_rangesau verifică întâi cufind/contains.
Comenzi înrudite
std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.std::map::find: find() caută o cheie și returnează un iterator la ea sau end(); count() și contains() spun doar dacă există.std::vector::at: Returnează elementul de la o poziție, cu verificare: aruncă std::out_of_range dacă poziția nu există.std::out_of_range: Excepție aruncată când un index sau o cheie este în afara limitelor (vector::at, string::substr, map::at).