C++中的map用法的总结

定义

map<string,int> Map;//定义一个map
unordered_map<int,int> Map;//关键字 unordered_map 和 map都是定义一个map的意思
Map.size()   //返回一个map中元素的个数
map<int,string>::iterator it// 声明一个迭代器

插入数据

插入数据之前先说一下pair和make_pair的用法

pair是一个结构体,有first和second两个域,可以直接访问

string key = "sunquan";

int value = 123456;

pair<string,int>b(key,value) ////这里 pair <string,string>是数据类型,后面是调带参构造方法

而make_pair是返回一个pair <类型,类型> 的数据,eg:make_pair("asa",123456); 不过还得找个pair <string,int>类型的变量来接受返回值。

下边三种插入方式都是对的

Map["abc"] = 1;
Map.insert(pair<string,int>("c",3));
Map.insert(make_pair<string,int>("d",4));

修改和查找数据

修改
Map["sunquan"] = 111;
查找数据用map.find(key);
可以通过键来查找。会返回迭代器地址,key不存在的话迭代器的值为map.end().

\color{red}{切记不要用int value=Map[key];这样会在Map中增加这个key,而value就是缺省值(int 为0,string为空字符串)。}

删除元素

通过key
通过迭代器来删除

以下代码包含两种删除的方法

#include <iostream>  

#include <cstring>  

#include <string>  

#include <map>  

using namespace std;

int main()  

{  

    map<string,int> Map;  

    map<string,int> ::iterator it;  

    Map.insert(pair<string,int>("first",11));  

    Map.insert(pair<string,int>("second",22));  

    for(it=Map.begin();it!=Map.end();it++)  

        cout<<it->first<<"    "<<it->second<<endl;  

    it=Map.begin();  

    Map.erase(it);//通过迭代器删除  

    string key="root";  

    Map.erase(key);//通过key删除  

    Map.erase(Map.begin(),Map.end());//一个迭代器,到另一个迭代器  

    //相当于  Map.clear();  

    for(it=Map.begin();it!=Map.end();it++)  

        cout<<it->first<<"    "<<it->second<<endl;  

    return 0;  

}

int main(int argc, char* argv[])
{
    map<string, string> mapData;
    
    mapData["a"] = "aaa"; 
    mapData["b"] = "bbb"; 
    mapData["c"] = "ccc"; 
 
 
    for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); i++)
    {
        if (i->first == "b")
        {
            mapData.erase(i);
        }
    }
    return 0;
}

这是错误的写法

那是因为i指针在删除后失效了

正确的写法

 
int main(int argc, char* argv[])
{
    map<string, string> mapData;
    
    mapData["a"] = "aaa"; 
    mapData["b"] = "bbb"; 
    mapData["c"] = "ccc"; 
 
 
    for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/)
    {
        if (i->first == "b")
        {
            mapData.erase(i++);
        }
        else
        {
            i++;
        }
    }
    return 0;
}
 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容