C ++ - Как узнать, нет ли возвращаемого значения из карты :: upper_bound ()? - PullRequest
1 голос
/ 20 мая 2009

У меня очень простая карта:

std::map<int, double> distances;
distances[20.5] = 1;
distances[19] = 2;
distances[24] = 3;

Как узнать, нет ли возвращенного значения при использовании map :: upper_bound () в этом случае, например:

std::map<int, double>::iterator iter = distances.upper_bound(24);

(24 - это ключ макс., Поэтому возвращается неожиданный результат, но как узнать это с помощью кода? Как узнать, что я достиг ключа макс?).

Спасибо!

Ответы [ 3 ]

11 голосов
/ 20 мая 2009
if (iter == distances.end())
    // no upper bound
4 голосов
/ 20 мая 2009

Большинство итераторов в C ++ будут установлены в конец коллекции для представления отсутствующего значения. Это единственное допустимое значение для итератора, представляющее «нет больше данных».

Таким образом, вы можете сравнить iter с distances.end(), и если они равны, то вы получите свой ответ.

2 голосов
/ 21 мая 2009

Это distances.end(), что имеет смысл. Интуитивно понятно, что upper_bound() возвращает итератор, который указывает на первое место «после», где находится или будет находиться ваш ключ на карте. Если все ключи на карте меньше или равны вашему ключу, то первое место после всех них - конечный итератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...