利用Set查找最大的比某数小的数
作者:互联网
利用Set查找最大的比某数小的数
由于做到一个算法题需要快速的求出动态数组里面的比某数小的、最大的数,所以我在研究了Set的函数后,自己推敲出了这个用法。
Set里面有个函数是“lower_bound(key_value) ,返回第一个大于等于key_value的定位器”。
那么既然如此,我们返回的是第一个大于等于某数的,那么上一个,就是比这个数小的、最大的数。
比如下面这个实例:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
const int N=2e5+10;
int main()
{
set<int> s;
for(int i = 1;i <= 10;i ++)
{
s.insert(i);
}
s.erase(4);
s.erase(5);
set<int>::iterator iter=s.lower_bound(5);
iter--;
cout << "最大的小于 5 的值是: ";
cout<<*iter<<endl;
return 0;
}
我刻意把数组中的4 和 5删掉了,我们直接找比5小的、最大的数,找出来的就是3,而实际确实就是3。
里面有一步:
set<int>::iterator iter=s.lower_bound(5);
这里为什么要用迭代器呢?
因为下面这个用法是错误的:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
const int N=2e5+10;
int main()
{
set<int> s;
for(int i = 1;i <= 10;i ++)
{
s.insert(i);
}
s.erase(4);
s.erase(5);
cout << "最大的小于 5 的值是: ";
cout<<*(s.lower_bound(5)-1)<<endl;
return 0;
}
不能对函数返回的定位器直接减一,要转换成迭代器才能减一(这个我也没搞懂哈哈哈~)。
思想就是:利用已有函数,实现新的用法!
标签:某数,Set,set,int,查找,erase,include 来源: https://blog.csdn.net/weixin_52985599/article/details/116999776