Значение по умолчанию для пары STL

Я пытаюсь заставить работать следующую карту:

enum ttype { shift, reduce }
map <string, pair<ttype, int> > lookup;

Так что это работает нормально, но мне нужен способ проверить, не был ли найден ключ. Так, например, что-то с эффектом:

cout << (lookup["a"]==NULL) << endl; // this is wrong, but I am trying to find a way to identify when lookup["a"] does not find a corresponding value

Похоже, что если ключ не найден, map вернет созданное по умолчанию значение (например, если он отображался на строку, он просто вернул бы пустую строку, и я мог бы просто проверить, если lookup [«a»] == «» — но я понятия не имею, каким будет значение по умолчанию для std :: пар).

1

Решение

operator[] добавляет элемент, когда он не найден, и возвращает созданный по умолчанию элемент. find() не возвращает созданную по умолчанию пару, но итератор указывает на значение, превышающее последнее значение вашей карты.

auto iter = lookup.find("a");
if (iter != lookup.end()) {
std::cout << "Key was found :)" << std::endl;
std::pair<ttype, int> result = iter->second;
std::cout << "Result was: " << result.second << std::endl;
} else {
std::cout << "Key was not found" << std::endl;
// Maybe add the key to the map?
}

С помощью find() немного более многословно, но делает его более читабельным (по моему мнению).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]