與lower_bound不同,upper_bound不會將迭代器返回給元素,前提是該元素與等效值相比較,但僅當它嚴格地比較大時。C++ STL算法upper_bound()不嚴格大於
如果我想要一個大於或等於的upper_bound算法,是否有替代方案?
與lower_bound不同,upper_bound不會將迭代器返回給元素,前提是該元素與等效值相比較,但僅當它嚴格地比較大時。C++ STL算法upper_bound()不嚴格大於
如果我想要一個大於或等於的upper_bound算法,是否有替代方案?
您可以通過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
難道你不能只使用'lower_bound()'? – quasiverse 2012-07-08 07:44:54
希望STL內置了一些東西,但這不是一個糟糕的選擇。 – user788171 2012-07-08 07:48:05
@quasiverse:當目標出現多次出現(即當std :: equal_range()不返回空範圍)時,它與'lower_bound()'不同。看到更新的數字。 – kennytm 2012-07-08 07:50:48
...'LOWER_BOUND()' ? – quasiverse 2012-07-08 07:40:59
-1問題不明確。你說你想要大於或等於。你的意思是第一項大於或等於你給的價值?或者最後一項大於或等於你給的值?或*任何*項目大於或等於您給的價值?這些職能的名稱和合同已經非常令人困惑,所以請對你的要求做出非常準確的判斷。 – 2014-05-08 23:05:44