mardi 3 mai 2022

Difference between std::unordered_map::operator[] and std::unordered_map::at [duplicate]

I thought the only difference between std::unordered_map::operator[] and std::unordered_map::at is that std::unordered_map::at throws std::out_of_range if the key doesn't exist.

However, in the following code snippet, std::unordered_map::at works but std::unordered_map::operator[] gives a compiler error

const unordered_map<char, string> digit2Letters {
    {'2', "abc"},
    {'3', "def"},
    {'4', "ghi"},
};

digit2Letters.at('1') // works good
digit2Letters['1']; // compiler error: no operator "[]" matches these operands

Does anyone know why std::unordered_map::at works but std::unordered_map::operator[] fails?

Aucun commentaire:

Enregistrer un commentaire