在std :: set s中是否存在小于给定x的元素
如果不打印,则“ x小于任何元素”,然后打印“小于x的最大元素”。
顺便说一句,您还知道x不在集合中
是:
cin >> x;
auto it = s.lower_bound(x);
it--;
if (it == s.begin())
cout << "x is the smallest element in s\n"
else
cout << *it;
好吗?
更多问题:
如果它= s.begin(),那么如果执行--it,它将是什么? 如果*这是集合中最小的元素,那么如果您--它将是什么?
答案 0 :(得分:0)
lower_bound
将返回一个迭代器,该迭代器指向小于x
的所有元素,即指向大于或等于x
的第一个元素。因此,如果它返回s.begin()
,则所有元素都是> = x
(没有一个更少)。因此,直接回答您的问题很好:
if (s.lower_bound(x) == s.begin())
cout << "x is smaller than all elements of s";
答案 1 :(得分:0)
如果it
是容器第一个元素的迭代器,则--it
是Undefined Behavior,这意味着您应确保程序不执行此操作。如果程序执行了,则可能会发生任何事情,这是程序的错误,而不是编译器或库。
因此在不包含x
的{{1}}中查找小于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";
为空,这也是正确的:根本没有s
的元素,因此没有小于s
的元素,并且“小于{{ 1}}“是虚无的。)