zoukankan      html  css  js  c++  java
  • STL map求value的名次和排序

    #include <stdio.h>
    #include <string>
    #include <stdlib.h>
    #include <iostream>
    #include <map>
    #include <vector>
    using namespace std;

    typedef map<int, int> templatemap;
    templatemap ScoreSort;
    int GetPOS(templatemap Sort, int nRoleID)
    {
     if (Sort.find(nRoleID) == Sort.end())
      return 0;
     int nPOS = 1;
     int nRoleScore = Sort[nRoleID];
     for (templatemap::iterator iter = Sort.begin(); iter != Sort.end(); iter++)
     {
      int nScore = iter->second;
      if (nRoleScore < nScore)
       nPOS++;
     }
     return nPOS;
    }
    int main()
    {
     for (int i = 0; i < 10; i++)
     {
      int nID = rand()%1000;
      ScoreSort[nID] = rand() % 1000;
     }
     //方法一:只要名次不排序
     for (templatemap::iterator iter = ScoreSort.begin(); iter != ScoreSort.end(); iter++)
     {
      int nScore = iter->second;
      int nPOS = GetPOS(ScoreSort, iter->first);
      cout << "ID:" << iter->first << "分数" << nScore << "名次" << nPOS << endl;
     }
     cout<<"------------------------------------------------"<<endl;
     //方法二:排序且给名次<map>
     templatemap MapSort;
     for (templatemap::iterator iter = ScoreSort.begin(); iter != ScoreSort.end(); iter++)
     {
      int nID = iter->first;
      int nScore = iter->second;
      MapSort[nScore] = nID;
     }
     int j = 0;
     for (templatemap::iterator iter = MapSort.begin(); iter != MapSort.end(); iter++)
     {
      cout << "ID:" << iter->second << "分数" << iter->first << "名次" << MapSort.size()-j << endl;
      j++;
     }
     cout<<"------------------------------------------------"<<endl;
     //方法三:排序且给名次<vector>
     vector<int> vectPOS;
     for (templatemap::iterator iter = ScoreSort.begin(); iter != ScoreSort.end(); iter++)
     {
      int nScore = iter->second;
      vectPOS.push_back(nScore);
     }
     sort(vectPOS.begin(),vectPOS.end());
     for (uint i = 0; i < vectPOS.size(); i++)
     {
      for (templatemap::iterator iter = ScoreSort.begin(); iter != ScoreSort.end(); iter++)
      {
       if(iter->second==vectPOS[i])
       {
        cout << "ID:" << iter->first<< "分数" << iter->second << "名次" << vectPOS.size()-i << endl;
        break;
       }
      }
     }
     getchar();
     return 0;
    }

  • 相关阅读:
    c#去除List中的重复项
    c#比较两个List相等
    C#笔记
    解决Xcode真机测试时ineligible devices的问题
    unity3d UGUI多语言
    解决ugui中Image使用iTween的ColorTo、ColorFrom等不生效
    Unity3d uGUI适配
    184. 最大数
    187. 加油站
    46. 主元素
  • 原文地址:https://www.cnblogs.com/byfei/p/3112269.html
Copyright © 2011-2022 走看看