2010-05-16 65 views
1

是否有一個函數與map::lower_bound做同樣的事情,除了它返回一個新的子映射而不是一個迭代器?map :: lower_bound返回一個映射

編輯:該函數應返回的子圖,其包含的量,關鍵是等於或大於一定值(其給定爲輸入函數)更大的所有值。

+0

你期望這樣一個子圖包含什麼? – 2010-05-16 13:37:58

+0

關於你的編輯:你不需要'upper_bound()'嗎? – sbi 2010-05-16 13:46:22

+1

'lower_bound'將找到不小於給定鍵的第一個元素,這明顯包含鍵本身。 'upper_bound'將不包含密鑰。 – 2010-05-16 14:04:22

回答

6

這樣的事情?

// Beware, brain-compiled code ahead! 
template< typename K, typename V > 
std::map<K,V> equal_or_greater(const std::map<K,V>& original, const K& k) 
{ 
    return std::map<K,V>(original.lower_bound(k), original.end()); 
} 

編輯:看來你真的想upper_bound()而不是lower_bound()

+0

@Marcelo:實際上,那個'blah'不是偶然的。根據某些具體情況,我很難爲創建地圖的函數想出一個好名字。 'equal_or_greater'聽起來像是比較函數,不像創建地圖的函數。 – sbi 2010-05-16 13:48:24

+0

公平點,sbi。我個人不介意以這種方式重載名稱,因爲參數往往可以解決混淆問題,而人類無論如何都很善於處理歧義。 – 2010-05-16 14:02:36