来自C ++ multiset lower_bound的意外输出

时间:2017-09-10 19:15:54

标签: c++ stl multiset

Wondeirng为什么下面的代码返回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;
}

3 个答案:

答案 0 :(得分:4)

mymultiset.lower_bound(3)返回3可以去的容器中的最低位置,以及容器末尾的位置。因此itlow等于mymultiset.end(),并且它不可解除引用。 std::cout << *itlow有未定义的行为。

答案 1 :(得分:1)

你正试图得到一个Iterator,他的下界是3,你的最大值是-3。所以你有一个结束迭代器,它的值是未定义的。 您应该使用multiset::begin()作为迭代器,或者使用itlow = mymultiset.lower_bound (-4);之类的不太温和的东西。

答案 2 :(得分:0)

您好,请澄清一下我的理解 我有一个包含1和5的多重集。

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

现在,从以上答案中,我将得到2,因为这是值6可以放入容器内的位置。我说的对吗?

接下来,如果我搜索值4,则得到5。 在这里,我认为迭代器尚未到达mset.end()。 我说的对吗?

谢谢