map
Posted shiliuxinya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了map相关的知识,希望对你有一定的参考价值。
map:hash映射,提供key和value,实现一对一的映射
①头文件:#include <map>
②使用方法:map<type1 , type2> Map;
③实现方法:map用红黑树实现,map先按照type1升序排序,再按type2升序排序。因此map是有序的,无须对map进行排序
④通过key找到value,key唯一,value不唯一
⑤unordered_map<type1 , type2> 无序map
无序map 插入和删除的时间复杂度为O(1),比普通map快
如果用map超时且不需要有序可以考虑无序map
unordered_map 在C++ 11 才可以用,否则会编译出错
⑥map的常用方法:
begin() 返回指向map头部的迭代器
end() 返回指向map末尾的迭代器
find() 查找一个元素
erase() 删除一个元素
insert() 插入元素
clear() 删除所有元素
empty() 如果map为空则返回true
size() 返回map中元素的个数
swap() 交换两个map
count() 返回指定元素出现的次数
例:
map<int , string> mapStudent ;
①插入数据:insert()
//用pair向map插入数据 //可typedef pair<int, string> P; 简化操作 map<int,string> mapStudent; mapStudent.insert(pair<int,string>(1,"student_one")); mapStudent.insert(pair<int,string>(2,"student_two")); mapStudent.insert(pair<int,string>(3,"student_three"));
②查找数据:find()返回key所在的位置,返回的是迭代器;若key不存在返回最后一个元素的位置
map<int,string>::iterator iter ; //定义迭代器 iter = mapStudent.find(1); //返回key=1的元素所在的位置给iter if(iter != mapStudent.end()) cout<<”the value is ”<<iter->second<<endl;
③删除数据:erase()提供用key删除元素或用迭代器删除,也可用迭代器范围删除区间元素
//erase()提供三种方法 //用迭代器刪除元素 iter = mapStudent.find("1"); mapStudent.erase(iter); //用关键字刪除,删除成功返回1,否则返回0 int n = mapStudent.erase("1"); //用迭代器范围刪除 : 把整个map清空 mapStudent.erase(mapStudent.begin(), mapStudent.end());
以上是关于map的主要内容,如果未能解决你的问题,请参考以下文章