其他分享
首页 > 其他分享> > 利用Set查找最大的比某数小的数

利用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