我在 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;
}
特别是,我不喜欢最后的使用,也不喜欢to--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()。