C++中Map常见用法以及按照value排序

今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下:

算法题为 给一个字符串例如  abaaba,每连续两个字符组成一个子串 ab, ba, aa,ab,ba,统计出现的个数,按照个数大小排序打印,这里 ab 2次,ba两次,aa 1次,如果都是一样的次数,按照字典顺序打印,例如这里ab 和ba都是2次,那么先打印ab 然后是ba 最后 是aa;

算法:找出字串,然后用map记录这个string和它出现的个数,注意要用map不能用unordered_map,这样能保证是按照字典排序,然后再用一个稳定排序按照这个Map的key排序即可。

 #include <iostream>
 #include <string>
 #include <algorithm>
 #include <cstring>
 #include <vector>
 #include <unordered_map>
 #include <map>
 using namespace std;
 typedef pair<string, int> PAIR;
 int cmp(const PAIR &x, const PAIR &y)
 {
   return x.second > y.second;
 } 

 void p (string& s) {
     vector<string> vec;
     ;
     ; i < num; i++) {
         );
         vec.push_back(tmp);
     }
     sort (vec.begin(), vec.end());
     map <string, int> tmp;
     ]= {};
     ] = {};
     for (auto itr = vec.begin(); itr != vec.end(); itr ++) {
         string val = *itr;
         //cout << val << endl;
         ] - ] - 'a'] == true) {
         tmp[val] = tmp[val] + ;
         } else {
         tmp[val] = ;
         }
         first[val[] - 'a'] = true;
         sec[val[] - 'a'] = true;
     }
     vector <PAIR> pair_vec; //用pair来实现按照pair的第二个元素大小也就是value排序
     for (auto it = tmp.begin(); it != tmp.end(); it++) {
         pair_vec.push_back(make_pair(it->first, it->second));
     }
     stable_sort(pair_vec.begin(), pair_vec.end(), cmp);
     for (auto curr = pair_vec.begin(); curr != pair_vec.end(); ++curr) {
         cout << curr->first << endl;
     }
 }
 int main() {
     string s;
     cin >> s;
     p(s);
     ;
 };

测试代码

mississippitennessee

输出:

ss
is
si
ee
en
es
ip
it
mi
ne
nn
pi
pp
se
te

上一篇:C语言一个程序的存储空间


下一篇:JS中Map的用法