离散化模板

本文深入探讨了离散化模板的实现,通过C++代码示例详细解释了如何使用sort、unique、lower_bound和erase函数对数组进行离散化处理。重点介绍了unique函数的用法,包括其对有序容器的重新排列特性,以及如何配合erase函数去除重复元素。同时,文章还阐述了lower_bound函数在查找元素方面的作用。

离散化模板

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	int n, a[100], b[100];
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	   scanf("%d",&a[i]),b[i]=a[i];
	sort(b+1,b+n+1);
	int tot=(int)(unique(b+1,b+n+1)-(b+1));
	for(int i=1;i<=n;i++)
	{
		a[i]=(int)(lower_bound(b+1,b+n+1,a[i])-b);
		printf("%d ", a[i]);
	}
	return 0;
}

unique函数:
std::unique
功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复出
现的 元素依次排在后面
返回值:返回迭代器,迭代器指向的是重复元素的首地址

加函数返回值
lower_bound函数以及upper_bound函数返回的是一个iterator,它指向在区间[first,last)标记的有序序列中可以插入value、此解释来自于百度百科

unique函数去掉容器中的相邻的重复元素,要求容器中的元素一定要有序,所以一般在使用函数unique的时候,都要对数组或者容器中的元素进行排序,函数不是真正的去除重复,函数返回的是去重后的尾地址,在返回的尾地址之后就是重复元素(将重复的元素放到数组的后方)

erase函数表示删除迭代器所指示的某一位置或者某一区间的元素,返回值是一个迭代器,指向被删除元素后面的元素

lower_bound、upper_bound以及unqiue、erase函数的用法

STL——upper_bound && lower_bound

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值