map遍历几种方式/求和/排序

 我来答
若以下回答无法解决问题,邀请你更新回答
fallx
2018-06-04 · TA获得超过5486个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:730万
展开全部
#include <iostream>
#include <map>
#include <iterator>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int cmp(const pair<string, int>& x, const pair<string, int>& y) 
//从大到小排序
{  
    return x.second > y.second;  
}  
   
void sortMapByValue(map<string, int>& tMap,vector<pair<string, int> >& tVector)
//将map元素转存为vector  
{  
    for (map<string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)   
        tVector.push_back(make_pair(curr->first, curr->second));    
   
    sort(tVector.begin(), tVector.end(), cmp); //对vector对序,实现按单词出现次数排序
}  

int main(int argc, char* argv[])
{
    map<string, int> mapData;//对map有两种遍历
    //常用的是迭代器,看下面遍历输出2
    map<int ,string> m2;   //针对map<int,类型>
    //也可以按map[i]顺序遍历,下面输出1 
    
    mapData["a"] = 11; 
    mapData["b"] = 4; 
    mapData["c"] = 3; 
    mapData["d"] = 13; 
    mapData["e"] = 10; 

    m2[1]="aa";
    m2[4]="dd";
    m2[7]="ee";
    m2[2]="ff";
/*************************输出1*****************************/
    for (size_t i=0; i!=m2.size();++i)//遍历输出1
    {
       string temp=m2[i];
       if(temp.size()>0)//有兴趣要以这句判断注释掉再看看输出效果
            cout<<i<<","<<temp<<endl;
    }
    m2.clear();//清空m2
/********************************删除及输出2**********************/
    cout<<"before deleted:"<<endl;//遍历输出2
    for (map<string, int>::iterator i=mapData.begin(); i!=mapData.end();++i )
    {
        cout<<i->first<<","<<i->second<<endl;
    }
    for (map<string, int>::iterator i=mapData.begin(); i!=mapData.end(); )//删除数据
    {
        if (i->first == "c"|| i->second==13)//按key删除与按value删除
        {
            mapData.erase(i++);//注意i变化,很容易出错
            cout<<"deleted"<<endl;
        }
        else
            i++;
    }
   
/**********************************对value排序********************/
    vector <pair<string,int > > tVector;  //将map内容转存到vector中,进行排序
    sortMapByValue(mapData,tVector);  //对map中的value排序:因map特性,不支持sort()算法直接排序
        //所以,通过将map内容转存到vector容器中进行排序
        //map默认按key已经排好序的了.下面要做的是对value排序
    for(int i=0;i<tVector.size();i++)  
        cout<<tVector[i].first<<","<<tVector[i].second<<endl;      
  
    return 0;
}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式