• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cfans1993
V2EX  ›  程序员

C++ STL set 容器中插入相同的值时,对 upper_bound 是否有影响

  •  
  •   cfans1993 · Jan 25, 2015 · 9399 views
    This topic created in 4131 days ago, the information mentioned may be changed or developed.

    上关键代码:
    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?

    8 replies    2015-01-27 07:57:13 +08:00
    slowman
        1
    slowman  
       Jan 25, 2015
    没人回复,好吧,我来
    不是 5,那你认为应该是几?
    messyidea
        2
    messyidea  
       Jan 25, 2015
    4都没有,当然是5了。。我不知道lz想要表达什么。。
    Dannytmp
        3
    Dannytmp  
       Jan 25, 2015
    C++太TM复杂了,早早放弃鸟
    spacewander
        4
    spacewander  
       Jan 25, 2015
    ……因为你第二次没有插入4,比3更大的数字就是5了。
    66450146
        5
    66450146  
       Jan 25, 2015
    本来就不应该直接用 *c.upper_bound(3) 这样的写法,因为 upper_bound 有可能是 .end()

    多看文档吧
    inevermore
        6
    inevermore  
       Jan 26, 2015
    楼上说的对,起码先判断一下是不是end
    ryd994
        7
    ryd994  
       Jan 27, 2015
    拜托,你都*了,出来的是内容又不是下标……再说了set也没下标一说啊(key=value)
    cfans1993
        8
    cfans1993  
    OP
       Jan 27, 2015
    @ryd994 第一天晚上硬是看不明白,然后第二天早上起来一下就看明白了,都不敢看回复了,简直so no face
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1118 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 18:18 · PVG 02:18 · LAX 11:18 · JFK 14:18
    ♥ Do have faith in what you're doing.