C ++设置lower_bound()迭代器

时间:2016-11-27 06:26:55

标签: c++

我想在C ++中找到std :: set中的最大元素,严格小于给定元素。有些问题建议找到lower_bound迭代器并递减它,即

set<int> st;
// Add elements
int x;
// calculate x
auto it = st.lower_bound(x);
if(it != st.begin()) {
    it--;
}

Documentation不清楚lower_bound返回什么类型的迭代器(例如Forward,Bidirectional),那么我们怎么知道递减这个迭代器是有效的呢?我们还可以估计递减std :: set iterator的复杂性吗?

2 个答案:

答案 0 :(得分:1)

根据documentation of set::lower_bound on cplusplus.com,在“返回值”下:

  

成员类型iteratorconst_iterator是指向元素的bidirectional iterator类型。

所以你总是能够减少迭代器(当然,在begin检查之后)。

递减迭代器的复杂性始终是(摊销的)常量。请参阅this answer

答案 1 :(得分:1)

std::set::lower_bound的返回类型为std::set::iteratorstd::set::const_iteratorstd::set为{{1}},它们都是常量member types