map遍历几种方式/求和/排序
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
#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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询