firemail

标题: 统计出现次数和对map按value排序 [打印本页]

作者: jimu    时间: 2016-5-2 12:09
标题: 统计出现次数和对map按value排序
  1. CDR_PILOT stPilotTemp;
  2.         CDR_CELL_EX stCellExTemp;
  3.         //map<__int64, CDR_CELL_EX> m_mapCellEx;
  4.        
  5.         for( map<string, CDR_CELL>::iterator itor = m_mapCell.begin(); itor != m_mapCell.end(); itor++ )
  6.         {
  7.                         vector<CDR_CELL_EX> vec_CellEx;
  8.                         for( size_t i = 0; i < itor->second.vec_pilot_other.size() ; i++ )
  9.                         {
  10.                                 stPilotTemp = itor->second.vec_pilot_other[i];
  11.                                 bool bfind = false;
  12.                                 for (vector<CDR_CELL_EX>::iterator itcellex = vec_CellEx.begin(); itcellex != vec_CellEx.end(); itcellex++ )
  13.                                 {
  14.                                         if ( itcellex->stPilot.NE_SYS_ID == stPilotTemp.NE_SYS_ID )
  15.                                         {
  16.                                                 bfind = true;
  17.                                                 itcellex->nPilotCount++;
  18.                                                 break;
  19.                                         }
  20.                                 }
  21.                                 if (!bfind)
  22.                                 {
  23.                                         stCellExTemp.nPilotCount = 1;
  24.                                         stCellExTemp.stPilot = stPilotTemp;
  25.                                         vec_CellEx.push_back(stCellExTemp);
  26.                                 }
  27.                                
  28.                                 //map<__int64, CDR_CELL_EX>::iterator itfind = m_mapCellEx.find(stPilotTemp.NE_SYS_ID);
  29.                                 //if (itfind == m_mapCellEx.end()) //没有查找到,则增加一条
  30.                                 //{
  31.                                 //        m_mapCellEx[stPilotTemp.NE_SYS_ID].nCountValue = 1;
  32.                                 //        m_mapCellEx[stPilotTemp.NE_SYS_ID].stPilot = stPilotTemp;
  33.                                 //}
  34.                                 //else
  35.                                 //{
  36.                                 //        m_mapCellEx[stPilotTemp.NE_SYS_ID].nCountValue++;
  37.                                 //}
  38.                                
  39.                         }


  40. 上面如果使用map<__int64, CDR_CELL_EX> 把则需要对它的value进行排序

  41. http://www.cnblogs.com/wanpengcoder/archive/2010/10/24/1859682.html
  42. map默认是按照键(key)排序的。很多时候我们需要按值(value)排序,靠map里的

  43. 算法当然是不行的,那么可以把它转存到vector中,在对vector按照一定的规则排序即可。

  44. //示例代码:输入单词,统计单词出现次数并按照单词出现次数从多到少排序


  45. #include <cstdlib>

  46. #include <map>

  47. #include <vector>

  48. #include <string>

  49. #include <algorithm>

  50. #include <iostream>



  51. void sortMapByValue(std::map<std::string, int>& tMap, std::vector<std::pair<std::string, int> >& tVector);

  52. int cmp(const std::pair<std::string, int>& x, const std::pair<std::string, int>& y);



  53. int main()

  54. {

  55. std::map<std::string, int> tMap;

  56. std::string word;

  57. while (std::cin >> word)

  58. {

  59. std::pair<std::map<std::string, int>::iterator, bool> ret = tMap.insert(std::make_pair(word, 1));

  60. if (!ret.second)

  61. ++ret.first->second;

  62. }



  63. std::vector<std::pair<std::string,int> > tVector;

  64. sortMapByValue(tMap,tVector);

  65. for(int i=0;i<tVector.size();i++)

  66. {

  67.   std::cout<<tVector[i].first<<": "<<tVector[i].second<<std::endl;

  68. }  



  69. system("pause");

  70. return 0;

  71. }



  72. int cmp(const std::pair<std::string, int>& x, const std::pair<std::string, int>& y)

  73. {

  74. return x.second > y.second;

  75. }



  76. void sortMapByValue(std::map<std::string, int>& tMap, std::vector<std::pair<std::string, int> >& tVector)

  77. {

  78. for (std::map<std::string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)

  79. {

  80. tVector.push_back(std::make_pair(curr->first, curr->second));

  81. }



  82. std::sort(tVector.begin(), tVector.end(), cmp);

  83. }

复制代码





欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3