离散化模板
#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函数表示删除迭代器所指示的某一位置或者某一区间的元素,返回值是一个迭代器,指向被删除元素后面的元素
本文深入探讨了离散化模板的实现,通过C++代码示例详细解释了如何使用sort、unique、lower_bound和erase函数对数组进行离散化处理。重点介绍了unique函数的用法,包括其对有序容器的重新排列特性,以及如何配合erase函数去除重复元素。同时,文章还阐述了lower_bound函数在查找元素方面的作用。
184

被折叠的 条评论
为什么被折叠?



