STL map的用法

来源:互联网 发布:c语言数据溢出怎么办 编辑:程序博客网 时间:2024/05/21 17:32
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;elsecout<<"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);elseiter++;}


0 0
原创粉丝点击