C++中的STL中map用法详解(零基础入门)

目录

  • 一、什么是 map ?
  • 二、map的定义
    • 2.1 头文件
    • 2.2 定义
    • 2.3 方法
  • 三、实例讲解
    • 3.1 增加数据
    • 3.2 删除数据
    • 3.3 修改数据
    • 3.4 查找数据
    • 3.5 遍历元素
    • 3.6 其它方法
  • 四、总结
    map 在编程中是经常使用的一个容器,本文来讲解一下 STL 中的 map,赶紧来看下吧!

    一、什么是 map ?
    map 是具有唯一键值对的容器,通常使用红黑树实现。
    map 中的键值对是 key value 的形式,比如:每个身份证号对应一个人名(反过来不成立哦!),其中,身份证号就是 key,人名便是 value,是单项的关系,可以与 hash 作类比。

    二、map的定义

    2.1 头文件

    使用 map 需要引入头文件,如下所示:
    #include


    2.2 定义

    定义形式如下所示:
    map变量名

    注意:如果没有 using namespace std, map需要写成 std:map。
    来看一个简单的例子:
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量node[123456] = "张三"; cout<<"身份证号123456的人叫"<
    输出为:
    身份证号123456的人叫张三

    在上例中,定义了一个key 为 int ,value 为 string 的 map 容器 node。

    2.3 方法

    map 最常见的方法如下所示:
    //常用size()// 计算元素个数empty()// 判断是否为空,空返回 trueclear()// 清空容器erase()// 删除元素find()// 查找元素insert()// 插入元素count()// 计算指定元素出现的次数begin()// 返回迭代器头部end()// 返回迭代器尾部 //非常用swap()// 交换两个map容器,类型需要相同max_size()// 容纳的最大元素个数rbegin()// 指向map尾部的逆向迭代器rend()// 指向map头部的逆向迭代器lower_bound() // 返回键值大于等于指定元素的第一个位置upper_bound() // 返回键值大于指定元素的第一个位置equal_range() // 返回等于指定元素的区间


    三、实例讲解

    3.1 增加数据

    方法1:以数组下标的形式直接增加,即:变量名[key] = value 的形式。
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量node[123456] = "张三"; node[123457] = "李四"; node[123458] = "王五"; cout<<"身份证号123456的人叫"<
    输出为:
    身份证号123456的人叫张三
    身份证号123457的人叫李四
    身份证号123458的人叫王五

    方法2:直接插入键值对。
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量 node.insert(pair(123456, "张三")); node.insert(pair(123457, "张三")); node.insert(pair(123458, "李四")); cout<<"身份证号123456的人叫"<
    输出为:
    身份证号123456的人叫张三
    身份证号123457的人叫张三
    身份证号123458的人叫李四

    其中,pair 定义了一个键值对,对应 map 的 key 和 value。

    3.2 删除数据

    删除数据使用到 map 的 erase 和 clear方法,来看一下例子:
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量 node[123456] = "张三"; node[123457] = "李四"; node[123458] = "王五"; cout<<"size = "<
    输出为:
    身份证号123456的人叫张三
    身份证号123456的人叫李四


    3.4 查找数据

    查找数据通过 find 函数来实现,如下所示:
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量 node[123456] = "张三"; node[123457] = "李四"; node[123458] = "王五"; map::iterator iter = node.find(123456); if(iter != node.end()) {cout<<"身份证号123456的人叫"<second<
    输出为:
    身份证号123456的人叫张三
    find 方法返回的是 map 的迭代器。

    3.5 遍历元素

    遍历元素使用迭代器的方式,如下所示:
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量 node[123456] = "张三"; node[123457] = "李四"; node[123458] = "王五"; map::iterator iter; //定义迭代器 iterfor(iter = node.begin(); iter != node.end(); ++iter) {cout<<"身份证号"<first<<"的人叫"<second<
    输出为:
    身份证号123456的人叫张三
    身份证号123457的人叫李四
    身份证号123458的人叫王五

    其中,使用迭代器 iter 遍历容器,可以将迭代器理解为一个存储了 key 和 value 的一个结构,first 对应 key,second 对应 value。

    3.6 其它方法

    (1)swap 函数
    交换两个 map 容器的内容,map 容器的类型必须相同,例如:
    #include #include // 头文件#include using namespace std; int main() {mapnode1; // 定义变量mapnode2; node1[11] = "张三"; node1[12] = "李四"; node2[21] = "王五"; node2[22] = "赵六"; node2[23] = "孙七"; node1.swap(node2); map::iterator iter; cout<<"node1 :"<::reverse_iterator iter; for(iter = node.rbegin(); iter != node.rend(); ++iter) {cout<<"key = "<first<<" value = "https://www.it610.com/article/<second<
    输出为:
    key = 13 value = https://www.it610.com/article/王五
    key = 12 value = https://www.it610.com/article/李四
    key = 11 value = https://www.it610.com/article/张三

    注意:迭代器需要使用反向迭代器。
    (4)lower_bound 和 upper_bound
    #include #include // 头文件#include using namespace std; int main() {mapnode; // 定义变量 node[20] = "张三"; node[15] = "李四"; node[12] = "王五"; map::iterator iter = node.lower_bound(14); cout<<"key = "<first<<" value = "https://www.it610.com/article/<second<::iterator, map::iterator> p = node.equal_range(15); cout<<"key1 = "

      推荐阅读