int n =10;int a[12], b[12];//b数组用来存放去重后的数据for(int i =1; i <= n; i++){
cin >> a[i];
b[i]= a[i];}sort(b +1, b +1+ n);//unique 和 lower_bound都需要有序序列int len =unique(b +1, b +1+ n)- b;//记录b数组去重后的长度for(int i =1; i <= n; i++)
a[i]=lower_bound(b +1, b + len, a[i])- b;//离散化 利用二分查找 快速重新赋值
第二种,只需开个结构体即可,仔细看一遍就可理解,直接上代码
struct node
{int v, bh;//v表示离散化前的值} p[15];boolcmp(node a, node b){return a.v < b.v;}int a[105];//用来存放离散化后的数据int n =10;for(int i =1; i <= n; i++){
p[i].bh = i;
cin >> p[i].v;}sort(p +1, p + n +1, cmp);//按值大小排序for(int i =1; i <= n; i++)
a[p[i].bh]= i;