std::map::at în C++

Returnează valoarea unei chei existente; aruncă std::out_of_range dacă cheia nu există, fără să o adauge.

Sintaxă
Valoare& at(const Cheie& cheie);
const Valoare& at(const Cheie& cheie) const;

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 cu terminate. Prinde std::out_of_range sau verifică întâi cu find/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).