C++ 如何验证是否存在元素<;集合C+中的x+;

C++ 如何验证是否存在元素<;集合C+中的x+;,c++,iterator,stdset,lower-bound,C++,Iterator,Stdset,Lower Bound,在std::set s中是否有小于给定x的元素 如果没有打印“x是比任何元素都小的元素”,如果没有打印“比x小的最大元素”。 顺便说一下,你也知道x不在集合中 是: cin>>x; 自动it=s.下限(x); 它--; 如果(it==s.begin()) coutlower_bound将返回一个迭代器,它指向小于x的所有元素,即指向大于或等于x的第一个元素。因此,如果它返回s.begin(),那么所有元素都是>=x(没有一个元素是更少的)。因此,直接回答您的问题很好: if (s.lower_b

在std::set s中是否有小于给定x的元素
如果没有打印“x是比任何元素都小的元素”,如果没有打印“比x小的最大元素”。
顺便说一下,你也知道x不在集合中

是:

cin>>x;
自动it=s.下限(x);
它--;
如果(it==s.begin())

cout
lower_bound
将返回一个迭代器,它指向小于
x
的所有元素,即指向大于或等于
x
的第一个元素。因此,如果它返回
s.begin()
,那么所有元素都是>=
x
(没有一个元素是更少的)。因此,直接回答您的问题很好:

if (s.lower_bound(x) == s.begin())
    cout << "x is smaller than all elements of s";
if(s.lower_bound(x)=s.begin())

cout如果
it
是容器第一个元素的迭代器,那么
--it
是未定义的行为,这意味着您应该确保您的程序不会这样做。如果程序执行了,任何事情都可能发生,这是程序的错误,而不是编译器或库的错误

因此,在不包含
x
std::set s
中找到小于
x
的最大元素的正确方法是:

auto it = s.lower_bound(x);
if (it == s.begin())
    std::cout << x << " is smaller than all elements of s\n";
else
    std::cout << "The largest element in s smaller than " << x << " is "
              << *std::prev(it) << "\n";
autoit=s.下界(x);
如果(it==s.begin())

std::cout如果
it==s.begin()
,就不应该使用
--it
,因为行为未定义。
auto it = s.lower_bound(x);
if (it == s.begin())
    std::cout << x << " is smaller than all elements of s\n";
else
    std::cout << "The largest element in s smaller than " << x << " is "
              << *std::prev(it) << "\n";