2009-05-20 116 views
1

我有一个非常简单的地图:C++ - 如何知道map :: upper_bound()是否没有返回值?

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

我怎么知道,如果没有任何返回值,在这种情况下,例如使用地图:: UPPER_BOUND()时:

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

(24是最大密钥,所以会返回一个意外的结果,但是如何通过代码知道该如何知道我已经达到最大密钥?)。

谢谢!

回答

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

非常感谢:) – 2009-05-20 19:30:35

4

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

所以你可以比较iterdistances.end(),如果他们是平等的,那么你已经得到了你的答案。

2

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

相关问题