2016-11-27 3 views
1

私はstd :: setの中で最も大きな要素をC++で厳密に特定の要素よりも見つけたいと思っています。いくつかの質問には、LOWER_BOUNDイテレータを見つけ、デクリメントすることをお勧めそれすなわちC++ set lower_bound()iterator

イテレータの種類がリターンLOWER_BOUNDんするよう
set<int> st; 
// Add elements 
int x; 
// calculate x 
auto it = st.lower_bound(x); 
if(it != st.begin()) { 
    it--; 
} 

Documentationは不明である(例えばフォワード、双方向)ので、どのように我々はこのイテレータが有効であるデクリメント知っていますか?また、デクリメントするstd :: set iteratorの複雑さを見積もることもできますか? "戻り値" の下documentation of set::lower_bound on cplusplus.comによると

答えて

1

、:

メンバーの種類iteratorconst_iteratorは、要素を指しbidirectional iteratorタイプです。

だから、イテレータを常に減らすことができます(もちろん、beginチェックの後に)。

反復子を減分する複雑さは、常に定数になります(償却されます)。 this answerを参照してください。

+0

ちょうどあなたがそれが償却定数であることを追加したいかもしれません。 –