我编写了下面的示例代码来了解Map中的upper_bound(),但是我无法理解以下行为:-
// Sample upper_bound()
#include <iostream>
#include <map>
#include <limits>
int main ()
{
std::map<unsigned int,int> mymap;
std::map<unsigned int,int>::iterator itup;
mymap[0] = 5;
mymap[5] = 5;
mymap[10] = 5;
mymap[15] = 5;
mymap[20] = 5;
mymap[25] = 5;
mymap[30] = 5;
// print content:
for (std::map<unsigned int,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
itup=mymap.upper_bound (30);
std::cout<<"First "<< itup->first<<": Second "<< itup->second<<"\n";
return 0;
}
从http://en.cppreference.com/w/cpp/container/map/upper_bound,
“迭代器指向大于键的第一个元素。如果
找不到这样的元素,过去的结束(请参阅end())迭代器是
回到。”
为什么过去的迭代器会返回这样的值?
最佳答案
由于没有严格大于30
的键,因此itup
是结束迭代器。您不允许取消引用最终迭代器,因此您的程序具有未定义的行为。
关于c++ - Maps中upper_bound()的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35114855/