c++map容器

算法思路

首先构造一个map<int ,vector>容器。然后按顺序遍历字符串,大写的字母以'A'为标准添加到对应下标的vector中;小写的字母以'a'为标准添加到对应下标的vector中;与此同时添加一个辅助队列添加对应的下标。之后将map中的字母按照下标(此时排好序)转成一维vector。最后将对应的字符串下标与排好序的字母序列一一对应

具体算法实现

using namespace std;
//获取字母并对其排序,以及存取其下标
typedef vector<char>V;
int main(){
    string s;
    getline(cin,s);
    map<int,V>m;
    //存取下标
    vector<int>vi;  
    vector<char>vc;   
    for(int i=0;i<s.size();i++){
        if(('a'<=s[i]&&s[i]<='z')){
            m[s[i]-'a'].push_back(s[i]);
            vi.push_back(i);
        }if('A'<=s[i]&&s[i]<='Z'){
            m[s[i]-'A'].push_back(s[i]);
            vi.push_back(i);
        }
    }
    //将二维数组转成一维
    for(int i=0;i<26;i++){
         for(int j=0;j<m[i].size();j++)vc.push_back(m[i][j]);
    };
    for(int i=0;i<vi.size();i++){
        s[vi[i]]=vc[i];
    }
    cout<<s<<endl;
    
    return 0;
}