2009-05-20 119 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()返回指向第一個位置的迭代器,它位於「之後」,您的密鑰位於或位於地圖中。如果映射中的所有鍵都小於或等於您的鍵,那麼「之後」的第一個位置就是結束迭代器。

相關問題