map的高级复杂用法。
将map值的部分使用struct来表示。因为题目要求需要按照下标顺序从小到大输出。那么在struct中添加一个judge用于判断是否已经判别,这样在对字符串从index = 0开始,就满足了题目要求。

const int MAXN = 1001;

struct Point{
    int num;
    vector<int>AA;
    int judge = 0;
};

int main(){
    string A;
    map<char,Point>mapp;
    cin>>A;
    for(int i=0;i<A.size();i++){
        mapp[A[i]].num += 1;
    }
    for(int i=0;i<A.size();i++){
        if(mapp[A[i]].num>1){
            mapp[A[i]].AA.push_back(i);
        }
    }

    for(int i=0;i<A.size();i++){
        if(mapp[A[i]].num>1 && mapp[A[i]].judge==0){
            for(int j=0;j<mapp[A[i]].AA.size();j++){
                if(j==0)
                    printf("%c:%d",A[i],mapp[A[i]].AA[j]);
                else
                    printf(",%c:%d",A[i],mapp[A[i]].AA[j]);
            }
            cout<<endl;
            mapp[A[i]].judge = 1;
        }
    }

    return 0;
}