为什么设置0的lower_bound(2)
给出1作为结果
set<int> S;
S.insert(0);
cout<<*(S.lower_bound(2))<<endl;
我认为它应该返回集合
中的一些元素答案 0 :(得分:5)
lower_bound
返回一个迭代器。如果您要求的值不存在,它将返回一个迭代器,您可以将其作为insert
参数传递给hint
(并获得常量复杂性插入),这意味着迭代器引用元素在您要求搜索的值之后立即排序。
当您传递的值大于集合中的任何值时,它将返回容器的.end()
迭代器。尝试取消引用结束迭代器会产生未定义的行为 - 它不会引用任何实际元素。
答案 1 :(得分:4)
iterator lower_bound( const Key& key );
返回一个指向第一个元素的迭代器,该元素不小于而不是键。
你的套装如下:
std::set<int> s {0};
因此没有不小于的元素。因此s.lower_bound(2)
会返回s.end()
。取消引用迭代器会调用未定义的行为,在您的情况下,恰好会给您1。