2012-07-08 34 views
-1

與lower_bound不同,upper_bound不會將迭代器返回給元素,前提是該元素與等效值相比較,但僅當它嚴格地比較大時。C++ STL算法upper_bound()不嚴格大於

如果我想要一個大於或等於的upper_bound算法,是否有替代方案?

+2

...'LOWER_BOUND()' ? – quasiverse 2012-07-08 07:40:59

+0

-1問題不明確。你說你想要大於或等於。你的意思是第一項大於或等於你給的價值?或者最後一項大於或等於你給的值?或*任何*項目大於或等於您給的價值?這些職能的名稱和合同已經非常令人困惑,所以請對你的要求做出非常準確的判斷。 – 2014-05-08 23:05:44

回答

1

您可以通過1

auto begin = ...; 
auto end = ...; 
auto it = std::upper_bound(begin, end, target); 
if (it == begin) 
    return it; 
-- it; 
if (*it < target) 
    return ++it; 
else 
    return it; 

的迭代器的位置會是這樣降低了迭代器,假設你正在尋找2:

1 1 1 2 2 2 2 3 3 3 3 
    ^ ^^ 
     lb | ub 
      this function 


1 1 1 1 3 3 3 3 
     ^
     lb & ub & this function 
+1

難道你不能只使用'lower_bound()'? – quasiverse 2012-07-08 07:44:54

+0

希望STL內置了一些東西,但這不是一個糟糕的選擇。 – user788171 2012-07-08 07:48:05

+0

@quasiverse:當目標出現多次出現(即當std :: equal_range()不返回空範圍)時,它與'lower_bound()'不同。看到更新的數字。 – kennytm 2012-07-08 07:50:48