c++map相关操作
一:map的内容排序(根据value给key排序)
解法思路:将map的每一个元素(std::pair<type,type>)添加到vector中,然后对于vector进行sort排序,同时排序方式可使用表达式自己实现。代码如下:
map排序
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
int main()
{
std::map<std::string,int> l_mapId;
l_mapId["liu"] = 2;
l_mapId["lei"] = 1;
l_mapId["success"] = 3;
std::vector<std::pair<std::string,int>> l_vecMap(l_mapId.begin(),l_mapId.end());
std::sort(l_vecMap.begin(),l_vecMap.end(),[](std::pair<std::string,int> l_idPair,std::pair<std::string,int> r_idPair){
return l_idPair.second>r_idPair.second;
});
for(auto pa:l_vecMap)
{
std::cout<<pa.first<<std::endl;
}
return 0;
}
二:map元素的删除
map中删除元素使用erase,该方法支持迭代器iter及key两种删除方法这里只展示一种代码
map元素删除
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
int main()
{
std::map<std::string,int> l_mapId;
l_mapId["liu"] = 2;
l_mapId["lei"] = 1;
l_mapId["success"] = 3;
std::vector<std::pair<std::string,int>> l_vecMap(l_mapId.begin(),l_mapId.end());
std::sort(l_vecMap.begin(),l_vecMap.end(),[](std::pair<std::string,int> l_idPair,std::pair<std::string,int> r_idPair){
return l_idPair.second>r_idPair.second;
});
for(auto pa:l_vecMap)
{
std::cout<<pa.first<<std::endl;
}
std::cout<<"根据value排序完成"<<std::endl;
l_mapId.erase("success"); // auto iter = l_mapId.find("success");l_mapId.erase(iter);
for(auto l_iter : l_mapId)
{
std::cout<<l_iter.first<<std::endl;
}
std::cout<<"根据key删除完成"<<std::endl;
return 0;
}
三:map元素的增加
map的元素add有两种方式,一种是直接使用[]来进行插入,一种是使用map的inster方法进行插入
例如:
std::map<std::string,int> l_mapName;
l_mapName["liu"] = 100; //使用数组下标来插入的方式
//std::pair<std::string,int>,这是给对应map格式插入的pair
l_mapName.insert(std::pair<std::string,int>("liu",100));
四:map元素的查找
map的查找同样有两种方式,一种是确定map中该key的数量是否大于0,若是则可以直接使用数组下标取出数据,第二种是使用map的find方法,find方法返回的是迭代器,根据迭代器取出该值
代码如下:
map查找
auto iter = l_mapId.find("lei");
std::cout<<"lei value is :"<<iter->second<<std::endl;
if(l_mapId.count("lei")>0)
{
std::cout<<"lei value is :"<<l_mapId["lei"]<<std::endl;
}