我有一张非常简单的地图:
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是最大键,因此会返回意外结果,但如何通过代码知道?如何知道我已达到最大键?)。
谢谢!
答案 0 :(得分:11)
if (iter == distances.end())
// no upper bound
答案 1 :(得分:4)
C ++中的大多数迭代器将设置为集合的末尾以表示缺少的值。这是迭代器表示“不再有数据”的唯一有效值。
因此,您可以将iter
与distances.end()
进行比较,如果它们相等,那么您就得到了答案。
答案 2 :(得分:2)
这是distances.end()
,这非常有意义。直观地,upper_bound()
返回指向第一个位置的迭代器,它位于地图之前或之后的“之后”。如果映射中的所有键都小于或等于你的键,那么所有这些键之后的第一个位置就是结束迭代器。