来自C MultiSet Lower_bound的意外输出

unexpected output from C++ multiset lower_bound

本文关键字:意外 输出 bound MultiSet Lower 来自      更新时间:2023-10-16

奇怪的原因为什么下面代码返回 1?我从不将1插入multiset容器中。

#include <iostream>
#include <set>
int main ()
{
  std::multiset<int> mymultiset;
  std::multiset<int>::iterator itlow;
  mymultiset.insert(-3);
  itlow = mymultiset.lower_bound (3);
  std::cout << *itlow << endl; // output 1
  return 0;
}

mymultiset.lower_bound(3)返回3可以使用的容器中的最低位置,这在容器的末端。因此,itlow等于mymultiset.end(),并且不可用。std::cout << *itlow具有未定义的行为。

您正在尝试获得他的下限为3的迭代器,而最大值为-3。因此,您有一个结束迭代器,他的价值不确定。您应该使用 multiset::begin()作为迭代器,或者放置不太温和的 itlow = mymultiset.lower_bound (-4);

嗨,要澄清我的理解我有一个包含1和5。

的多键
mset.insert(1);
mset.insert(5);
auto it = s.lower_bound(6);
cout<<*it<<endl;

现在,从上面的答案来看,我将获得2个,因为这是值6可以安装在容器内的位置。我是吗?

接下来,如果我搜索值4,则获得5。在这里,我认为迭代器没有达到mset.end()。我是吗?

谢谢