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;
    }
posted @ 2023-03-03 11:25  浅情1314  阅读(55)  评论(0编辑  收藏  举报