C ++ - 如何知道map :: upper_bound()是否没有返回值?

时间:2009-05-20 19:24:09

标签: c++ stl

我有一张非常简单的地图:

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 个答案:

答案 0 :(得分:11)

if (iter == distances.end())
    // no upper bound

答案 1 :(得分:4)

C ++中的大多数迭代器将设置为集合的末尾以表示缺少的值。这是迭代器表示“不再有数据”的唯一有效值。

因此,您可以将iterdistances.end()进行比较,如果它们相等,那么您就得到了答案。

答案 2 :(得分:2)

这是distances.end(),这非常有意义。直观地,upper_bound()返回指向第一个位置的迭代器,它位于地图之前或之后的“之后”。如果映射中的所有键都小于或等于你的键,那么所有这些键之后的第一个位置就是结束迭代器。