来自 C++ 多重集的意外输出 lower_bound

unexpected output from C++ multiset lower_bound

想知道为什么下面的代码 returns 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) returns 容器中 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()。 我说得对吗?

谢谢