Вопрос про итератор C ++ `map` - PullRequest
1 голос
/ 21 июня 2011

В нижеуказанных кодах,

std::map<Key,Int>::iterator p;
p = randomTable[chunk].find(value);
if (p != randomTable[chunk].end()) {

} else {

}

Как работает p != randomTable[chunk].end()?

Означает ли это, что для всех элементов в randomTable это не последний (end()) элемент?

Ответы [ 2 ]

5 голосов
/ 21 июня 2011

find (значение) будет возвращать то же самое, что и end (), если значение отсутствует на карте.Поэтому, если значение указано на карте, вы перейдете в ветку «если», а если нет, то перейдете в ветку «еще».

end () на самом деле не является членомкарта - она ​​указывает на «элемент после конца».Это немного странная идея, но, вероятно, помогает думать, что при поиске были просмотрены все элементы на карте и не удалось найти тот, который вы ищете.

3 голосов
/ 21 июня 2011

Нет.В документации для std::map<K, V>::find вы можете увидеть:

Возвращаемое значение

Итератор элемента, если указанзначение ключа найдено, или map :: end, если указанный ключ не найден в контейнере.

Итак, оператор if просто проверяет, что вы действительно что-то нашли.

...