C++ Map简介
来源:互联网 发布:剑三淘宝买金 编辑:程序博客网 时间:2024/05/16 01:39
C++ Map简介:
C++主要的关联容器(associative-container),在map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。字典是一个很好的使用map的例子:可以将单词作为关键字,将单词解释作为值。map内部自建一棵红黑树,对数据具有自动排序的功能,所以在map内部所有的数据都是有序的。map支持快速查找,其复杂度基本是log(n),支持快速插入,快速删除,快速修改。
1.定义关联容器:
map常用构造函数:
//默认构造函数,空容器map<string, size_t> myMap; //key-value对包围在花括号中{key,value} map<sring,string>myMap = {{“aaaa”,”bbbb”},{“bbbb”,”cccc”}};//拷贝构造函数map<int,int>myMap;map<int,int>myCopyMap(myMap);
2.map添加数据:
map<int,int>myMap;myMap.insert(pair<int,int>(2,2));myMap.insert(map<int,int>::value_type(3,3));myMap[4]=4;tip:使用insert方法插入时,如果map中已经存在key关键字,则该次插入失败,容器中将保存上一次插入成功时key-value对。而使用数组方式插入时,则会更新本次插入结果key-new_value。
例如insert方式:
map <int,int> myMap;pair<map<int, int>::iterator, bool> Insert_Pair;Insert_Pair=myMap.insert(pair<int,int>(1,2));cout<<(Insert_Pair.second==false)<<endl;Insert_Pair=myMap.insert(pair<int,int>(1,3));cout<<(Insert_Pair.second==false)<<endl;myMap.insert(pair<int,int>(3,4));myMap.insert(pair<int,int>(4,5));
例如数组方式:
map<int,int> myMap;myMap[1]=1;myMap[1]=2;myMap[1]=3;myMap[2]=4;myMap[3]=5;map <int,int>::iterator it=myMap.begin();while(it!=myMap.end()){cout<<"first:"<<it->first<<endl;cout<<"second:"<<it->second<<endl;it++;}
tip:由上代码可知insert返回一个pair,告诉我们插入操作是否成功,返回的pair的first的成员是一个迭代器指向插入key-value对元素,second成员是一个bool值,指出元素是否插入成功。
3.map根据关键字key查找:
使用find()函数根据key进行查找,如果查找成功则返回指向该关键字对应的迭代器,如果没有找到,则返回尾后迭代器myMap.end()。
tip:当从map中提取元素时,会得到一个pair类型的对象,它保存名为first和second的公有数据成员,其中first成员保存关键字key,second保存相应的值value。
例如:
map<int,int>::iterator it;it=map.find(2);if(it!=myMap.end()){cout<<”key=”<<it->first<<endl;cout<<”value=”<<it->second<<endl;}
4.map容器的迭代
如下代码所示:
map<string,int>myMap;myMap.insert(pair<string,int>(“hello”,1));myMap.insert(pair<string,int>(“world”,2));map<string,int>::iterator it=myMap.begin();for(;it!=myMap.end();it++){cout<<it->first<<endl;cout<<it->second<<endl;}
5.数据的清空与判断
清空map的数据可以用clear函数,判定map中是否有数据可以用empty()函数,它返回true则说明map为空。例如:
//myMap为非空关联容器
if(myMap.empty()){cout<<"1"<<endl;}myMap.clear();if(myMap.empty()){cout<<"2"<<endl;}
6.数据删除,使用erase()
//删除迭代器第一个元素map<string,int>::iterator it;it=myMap.begin();myMap.erase(it);//删除之后若要重新迭代容器,需要给迭代器变量重新赋值it=myMap.begin();//使用erase的一种重载可以清空map,作用相当于clear()myMap.erase(myMap.begin(),myMap.end());//使用erase的一种重载可以按照关键字删除//如果容器中不存在该关键字,函数返回0,删除失败,不改变原容器myMap.erase(“hello”);
参考:
《C++ primer》 (第五版)
http://www.kuqin.com/cpluspluslib/20071231/3265.html
0 0
- C++map类型 之 简介
- bit-map简介及其C/C++代码实现
- c++map
- c++MAP
- map(c++)
- c++map
- C++map
- Map/Reduce简介(zz)
- map-reduce简介
- map简介以及用法
- map用法简介
- Map-Reduce简介
- Map-Reduce简介
- System.map文件简介
- Map-Reduce简介
- Java Map接口简介
- 字典(map)简介
- map/multimap的简介
- 实现PDF转换HTML页面的操作方法
- 一张图读懂Java多线程
- PowerDesigner之PDM(物理概念模型)
- 【word】word跨页不断行问题
- python中如何用正则表达式匹配汉字
- C++ Map简介
- Android Studio项目的八种查看文件模式
- 黑马程序员_java13_java小知识点
- Semaphore学习笔记
- 基于protobuf的RPC实现
- 【Ubuntu】在QT运行程序后无结果显示,只有终端运行的解决办法
- 程序员八荣八耻
- 9个完整的开源项目
- Volley程序集合(使用单例,保证只会创建一个队列)