Я наткнулся на следующий фрагмент кода на C ++ (я еще не на C ++ 11):
int test(std::map<int, size_t> &threshold, const int value) {
std::map<int, size_t>::const_iterator itr = threshold.upper_bound(value);
if (threshold.begin() == itr) {
return -1;
}
return return (--itr)->second;
}
В частности, мне не нравится ни использование --itr
в конце, ни сравнение itr
с begin()
, они оба кажутся мне неправильными.
Мне интересно, есть ли способ с STL сделать какой-то поиск, который бы возвратил end () (или rend ()), если не найден, и иначе возвратил бы последний элемент, который меньше или равен value
чтобы код выглядел так:
int test(std::map<int, size_t> &threshold, const int value) {
std::map<int, size_t>::const_reverse_iterator itr = threshold.WhatGoesHere(value);
if (threshold.rend() == itr) {
return -1;
}
return return itr->second;
}
В некотором смысле, я хочу reverse_lower_bound (), который возвращает обратный итератор к последнему элементу, который не больше value
или, если ни один не может быть найден rend ().