zoukankan      html  css  js  c++  java
  • 字符串重复数量统计排序

    统计并排序

    数据:向map插入数据时候自增统计,完成对word数量的统计

    • sortPair原理
      把map中的所有pair元素插入 vector,然后使用 sort,完成排序,效率低

    • queueSortPair
      把map的元素插入数量有限的小端优先队列,比队列的最小值小的时候可以插入,
      从而保存最大的几个值。

    #include <algorithm>
    #include <fstream>
    #include <iostream>
    #include <map>
    //#include <set>
    #include <functional>
    #include <queue>
    #include <vector>
    
    using namespace std;
    typedef pair<string, int> PAIR;
    // bool cmp(const PAIR &a, const PAIR &b) { return a.second > b.second; }
    struct cmp {
      bool operator()(const PAIR &a, const PAIR &b) const {
        return a.second > b.second;
      }
    };
    
    void sortPair(map<string, int> mymap) {
      vector<PAIR> vectPair(mymap.begin(), mymap.end());
      std::sort(
          vectPair.begin(), vectPair.end(),
          [](const PAIR &lhs, const PAIR &rhs) { return lhs.second > rhs.second; });
    
      for (auto &it : vectPair) {
        cout << it.first << ":" << it.second << endl;
      }
    }
    void queueSortPair(map<string, int> vectPair) {
      priority_queue<PAIR, vector<PAIR>, cmp> priQueue;
      map<string, int>::iterator it;
      int i = 0;
      for (it = vectPair.begin(); it != vectPair.end(); it++, i++) {
        if (i < 3) {
          priQueue.push(*it);
        } else {
          if (it->second > priQueue.top().second) {
            priQueue.pop();
            priQueue.push(*it);
          }
        }
      }
    
      while (!priQueue.empty()) {
        cout << priQueue.top().first << ":" << priQueue.top().second << endl;
        priQueue.pop();
      }
    }
    
    int main() {
      fstream ifs("test.txt");
      if (!ifs) {
        return 1;
      }
      string word;
      std::map<string, int> mymap;
      // std::multiset<string> myset;
      while (ifs >> word) {
        // myset.insert(word);
        // mymap[word] = myset.count(word);
        mymap[word] += 1;
      }
      queueSortPair(mymap);
      cout << "-------------" << endl;
      sortPair(mymap);
    
      return 0;
    }
    
  • 相关阅读:
    MutationObserver DOM变化的观察
    lspci详解分析
    dpdk快速编译使用
    bonding的系统初始化介绍
    fio测试nvme性能
    [驱动] 一个简单内核驱动,通过qemu调试(1)
    qemu启动vm后,如何host上使用ssh连接?
    Linux C下变量和常量的存储的本质
    从计算机中数据类型的存储方式,思考理解原码,反码,补码
    Linux C动态链接库实现一个插件例子
  • 原文地址:https://www.cnblogs.com/ims-/p/13865896.html
Copyright © 2011-2022 走看看