采用multiset,find()与lower_bound()之间的区别是什么?
查看原帖
采用multiset,find()与lower_bound()之间的区别是什么?
407107
QI_YIN楼主2021/3/19 18:30

在第一种情况中,需要求数字num的位置。

//使用lower_bound()这道题能够AC:
cout<<distance(V.begin(),V.lower_bound(num));
//而如果将lower_bound()函数改为find(),则0分WA:
cout<<distance(V.begin(),V.find(num));

但是这两种方式均能够通过样例。

还希望各位大佬能够不吝赐教,指点迷津。

下面附上AC代码,出问题的语句在function1()中。

#include<bits/stdc++.h>
using namespace std;
//做法二:multiset
multiset<int,less<int>> V;

void function4(int num)
{//求后继
    multiset<int>::iterator it;
    it = V.upper_bound(num);
    cout<<*it;
}
void function3(int num)
{//求前驱
    multiset<int>::iterator it;
    it = V.lower_bound(num);
    it--;
    cout<<*it;
}
void function2(int num)
{//查排名为x的

    auto it = V.begin();
    while(num--)
    {
        it++;
    }
    cout<<*it;
}
void function1(int num)
{//求num的位置
    cout<<distance(V.begin(),V.lower_bound(num));//不能使用find,原因未知
}

int main()
{
    int n;
    V.insert(0x7fffffff);
    V.insert(-0x7fffffff);
    cin>>n;
    while(n--){
        int id,number;
        cin>>id>>number;
        switch(id)
        {
            case 5:V.insert(number);break;
            case 4:function4(number);break;
            case 3:function3(number);break;
            case 2:function2(number);break;
            default:function1(number);
        }
        if(id!=5)cout<<endl;
    }
    return 0;
}

2021/3/19 18:30
加载中...