C++,用好STL

字符统计

http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main(){
    string s;
    map<char,int> mp;
    while(cin>>s){
        //每次循环都要清一下map
        mp.clear();
        for(char c:s){
            ++mp[c];
        }
        //用迭代器范围初始化一个vector
        vector<pair<char,int>> vec(mp.begin(),mp.end());
        //因为map已经依照键排序了,所以用稳定排序当次数一样时,会保持原来的先后关系,即ASCII码的升序
        stable_sort(vec.begin(),vec.end(),[](const pair<char,int>& a,const pair<char,int>& b){
            //用Lambda来写配合算法使用的小函数是非常方便的
            return a.second>b.second;
        });
        for(auto iter=vec.begin();iter!=vec.end();++iter){
            cout<<iter->first;
        }
        cout<<endl;
    }
}
全部评论
貌似map不需要判断里面有没有这个键,直接mp[c]++就可以。
1 回复 分享
发布于 2022-02-01 10:48
很棒的思路,我也在尝试完全用stl解决。 tips:输出两个迭代器之间的内容可以这样:copy(it1, it2, ostream_iterator<int>(cout)); 侯捷巨佬介绍的方法。</int>
1 回复 分享
发布于 2023-06-19 03:16 广东
请问一下为什么不能用map容器的自定义排序呢,为什么要额外将数据装到vector容器里再去排序?
点赞 回复 分享
发布于 2023-10-06 16:30 江苏

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
43 8 评论
分享
牛客网
牛客企业服务