只能写成这样了 想知道怎么改

对数组A中的N(0<N<L00)个整数从小到大进行连续编号,要不能改变数组A中元素的顺序
且相同的整数具有相同的编号.例如: 若A 数组为{5,3,4,7,3,5,6} 则输出为: 3,1,2,5,1,3,4


#include<bits/stdc++.h>
using namespace std;
struct Data
{
    int num;//数值 
    int ra;//排名 
    int ind;//序号 
}d[10000];
bool cmpn(Data a,Data b)
{
    return a.num<b.num;
}
bool cmpi(Data a,Data b)
{
    return a.ind<b.ind;
}
int main()
{
    int n,count=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>d[i].num;
        d[i].ind=i+1;
    }
    sort(d,d+n,cmpn);
    for(int i=0;i<n;i++)
    {
        if(d[i].num!=d[i-1].num)
        {
            d[i].ra=++count;
        }
        else if(d[i].num==d[i-1].num)
        {
            d[i].ra=count;
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<d[i].ra<<" ";
    }
}

先复制数组,新数组排序,依序取旧数组数据与新数组比较,当相同时,取新数组下标写入旧数组,最后输出旧数组