map用法

参考博客:https://www.cnblogs.com/empty16/p/6395813.html

在这里仅对原笔主的博客做一点小补充;


一、Map 简介

  Map是STL的一个容器,它提供一对一的hash。

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次,
  • 第二个可能称为该关键字的值(value)


  Map以模板(泛型)方式实现,可以储存任意类型的变数,包括使用者自定义的资料型态。Map主要用于资料一对一映射(one-to-one)的情况,map内部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。比如一个班级中,每个学生的学号跟他的姓名就存在着一对一映射的关系。

二、成员函式概观与常用程式写法

1. 变量声明

map<string, string> mapStudent;

2. 插入元素

//用insert函數插入pair
    mapStudent.insert(pair<string, string>("r000", "student_zero"));
 
//用"array"方式插入
    mapStudent["r123"] = "student_first";
    mapStudent["r456"] = "student_second";

3. 查找


出现时,它返回资料所在位置,如果没有,返回iter与end函数返回相同

iter = mapStudent.find("r123");
 
if(iter != mapStudent.end())
       cout<<"Find, the value is"<<iter->second<<endl;
else
   cout<<"Do not Find"<<endl;

4. 删除&清空

清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明是空map,而资料的删除要用到erase函数,它有三个overload的函数。

//迭代器刪除
iter = mapStudent.find("r123");
mapStudent.erase(iter);
 
//用关键字刪除
int n = mapStudent.erase("r123");//如果刪除了会返回1,否则返回0
 
//用迭代器范围刪除 : 把整个map清空
mapStudent.erase(mapStudent.begin(), mapStudent.end());
//用删除函数
mapStudent.clear();

5.元素遍历

//迭代器遍历
for(map<string, string>::iterator iter = mapStudent.begin(); iter<mapStudent.end(); iter++);

//C++11特性
for(auto iter:mapStudent);

6.其他常用基本函数

swap()    //交换两个map

count()    //返回所查找元素个数

empty()    //若容器为空返回true

size()    //返回容器元素个数

rbegin()    //逆向迭代器,返回容器尾部
rend()    //逆向迭代器,返回容器头部
原文地址:https://www.cnblogs.com/liubilan/p/9458765.html