我想在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的复杂性吗?
答案 0 :(得分:1)
根据documentation of set::lower_bound
on cplusplus.com,在“返回值”下:
成员类型
iterator
和const_iterator
是指向元素的bidirectional iterator类型。
所以你总是能够减少迭代器(当然,在begin
检查之后)。
递减迭代器的复杂性始终是(摊销的)常量。请参阅this answer。
答案 1 :(得分:1)
std::set::lower_bound的返回类型为std::set::iterator
或std::set::const_iterator
,std::set
为{{1}},它们都是常量member types。