码迷,mamicode.com
首页 > 其他好文 > 详细

map

时间:2020-01-11 20:05:52      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:typedef   删除   air   ras   hash   out   文件   排序   使用   

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

标签:typedef   删除   air   ras   hash   out   文件   排序   使用   

原文地址:https://www.cnblogs.com/shiliuxinya/p/12180731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!