map是STL的一个关联容器,它提供一对一的数据处理能力(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)
一.插入
二.遍历
三.删除
一.插入
#include <map>
#include <iostream>
using namespace std;
int main() {
pair<map<int, string>::iterator, bool> insert_pair;
map<int, string> cls;
//1.使用pair插入
insert_pair = cls.insert(pair<int, string>(1, "zhangsan"));
insert_pair = cls.insert(pair<int, string>(2, "lisi"));
insert_pair = cls.insert(pair<int, string>(2, "wangwu"));
//判断是否插入成功
if (insert_pair.second == true)
cout<<"id:"<<insert_pair.first->first<<", name:"<<insert_pair.first->second.c_str()<<"插入成功"<<endl;
else
cout<<"id:"<<insert_pair.first->first<<", name:"<<insert_pair.first->second.c_str()<<"插入失败"<<endl;
cout<<"使用pair插入后:"<<endl;
for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
cout<<iter->first<<", "<<iter->second.c_str()<<endl;
//2.使用value_type插入
cout<<endl<<"使用value_type插入后:"<<endl;
cls.insert(map<int, string>::value_type(3, "zhaoliu"));
for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
cout<<iter->first<<", "<<iter->second.c_str()<<endl;
//3.使用数组下标插入(该方法和前两种的区别是,如果键已经存在,则会覆盖对应的值)
cout<<endl<<"使用数组下标插入后:"<<endl;
cls[3] = "sunqi";
for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
cout<<iter->first<<", "<<iter->second.c_str()<<endl;
return 0;
}
二.遍历
#include <map>
#include <iostream>
using namespace std;
int main() {
map<int, string> cls;
//1.使用正向迭代器遍历
cout<<"正向遍历:"<<endl;
cls.insert(pair<int, string>(1, "zhangsan"));
cls.insert(pair<int, string>(2, "lisi"));
for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
cout<<iter->first<<", "<<iter->second.c_str()<<endl;
//2.使用反向迭代器遍历
cout<<endl<<"反向遍历:"<<endl;
for (map<int, string>::reverse_iterator iter = cls.rbegin();iter != cls.rend();iter++)
cout<<iter->first<<", "<<iter->second.c_str()<<endl;
//3.使用数组遍历(有一定的局限性)
cout<<endl<<"数组遍历:"<<endl;
for (int i = 0; i < cls.size();i++)
cout<<i<<", "<<cls[i].c_str()<<endl;
return 0;
}
三.删除
map<int, string> m;
m.insert(pair<int, string>(1, "zhangsan"));
m.insert(pair<int, string>(2, "lisi"));
m.insert(pair<int, string>(3, "wangwu"));
m.insert(pair<int, string>(4, "zhaoliu"));
//1.使用迭代器删除一个元素
map<int, string>::iterator iter = m.find(2);
m.erase(iter);
//2.使用关键字删除一个元素
m.erase(1);
//3.删除多个元素
m.erase(m.begin(), m.end());
//4.删除符合条件的元素
//删除字符串中包含"li"的元素(即删除第2和第四个元素)
for (map<int, string>::iterator iter = m.begin();iter!=m.end();)
{
string::size_type index = iter->second.find("li");
if (index != string::npos)
iter = m.erase(iter);
else
iter++;
}