上关键代码:
set<int> c;
c.insert(1);
c.insert(2);
c.insert(3);
c.insert(4);
c.insert(5);
cout<<c.size()<<endl;
copy(c.begin(),c.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"lower_bound(3) "<<*c.lower_bound(3)<<endl;
cout<<"upper_bound(3) "<<*c.upper_bound(3)<<endl;
cout<<"equal_range(3) "<<*c.equal_range(3).first<<" "
<<*c.equal_range(3).second<<endl;
代码大致意图:
新建set容器,插入1,2,3,4,5,然后求得各种bound
打印结果是:
5
1 2 3 4 5
lower_bound(3) 3
upper_bound(3) 4
equal_range(3) 3 4
Press any key to continue
修改的分割线————————————————————————————————
当我把前面c.insert(4)改成c.insert(3)后,
结果是这样的:
4
1 2 3 5
lower_bound(3) 3
upper_bound(3) 5
equal_range(3) 3 5
Press any key to continue
问题的分割线————————————————————————————————
set容器不能重复元素,可为什么修改后,upper_bound(3)会由4变成5?
1
1423 2015-01-25 21:42:23 +08:00
没人回复,好吧,我来
不是 5,那你认为应该是几? |
2
messyidea 2015-01-25 22:50:24 +08:00
4都没有,当然是5了。。我不知道lz想要表达什么。。
|
3
Dannytmp 2015-01-25 22:53:03 +08:00
C++太TM复杂了,早早放弃鸟
|
4
spacewander 2015-01-25 23:22:56 +08:00
……因为你第二次没有插入4,比3更大的数字就是5了。
|
5
66450146 2015-01-25 23:24:54 +08:00
本来就不应该直接用 *c.upper_bound(3) 这样的写法,因为 upper_bound 有可能是 .end()
多看文档吧 |
6
inevermore 2015-01-26 09:37:51 +08:00
楼上说的对,起码先判断一下是不是end
|
7
ryd994 2015-01-27 02:06:04 +08:00
拜托,你都*了,出来的是内容又不是下标……再说了set也没下标一说啊(key=value)
|