定义
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().
删除元素
通过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;
}