c++中map的基本用法和嵌套用法实例分析

C++中map的基本用法和嵌套用法实例分析

什么是map?

map是C++ STL中的一个关联容器,其内部实现是“红黑树”,可以实现快速查找,查找效率高于vector和deque。

map容器中的元素以键值对的形式存储,支持根据键快速查找值,键和值可以是任意类型,但是键必须是可以比较的。

map的基本用法

创建map容器

#include <map>

std::map<int, std::string> myMap;

上述代码创建了一个map容器,其中键的类型为int,值的类型为string。

插入元素

可以使用insert函数向map容器中插入元素:

myMap.insert(std::make_pair(1, "One"));

也可以使用以下方式直接访问map的下标:

myMap[1] = "One";

删除元素

使用erase函数删除map容器中的元素:

myMap.erase(1);

查找元素

可以使用find函数查找元素:

std::map<int, std::string>::iterator iter = myMap.find(1);

如果找到了,则iter指向对应的键值对;否则,iter指向end()函数返回的迭代器。

遍历元素

使用迭代器遍历map容器中的元素:

for (std::map<int, std::string>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) {
    std::cout << "Key: " << iter->first << ", Value: " << iter->second << std::endl;
}

map的嵌套用法

map可以作为另一个map的值,从而实现嵌套的效果。

创建嵌套map容器

std::map<int, std::map<int, std::string>> myNestedMap;

插入元素

向嵌套map容器中插入元素时,需要指定两个键值:

myNestedMap[1][1] = "One:One";

删除元素

同样使用erase函数删除嵌套map容器中的元素:

myNestedMap[1].erase(1);

查找元素

查找嵌套map容器中的元素时,需要按照两个键值一一查找:

std::map<int, std::map<int, std::string>>::iterator iter1 = myNestedMap.find(1);
if (iter1 != myNestedMap.end()) {
    std::map<int, std::string>::iterator iter2 = iter1->second.find(1);
    if (iter2 != iter1->second.end()) {
        std::cout << "Key1: " << iter1->first << ", Key2: " << iter2->first << ", Value: " << iter2->second << std::endl;
    }
}

遍历元素

使用双重循环遍历嵌套map容器中的元素:

for (std::map<int, std::map<int, std::string>>::iterator iter1 = myNestedMap.begin(); iter1 != myNestedMap.end(); ++iter1) {
    for (std::map<int, std::string>::iterator iter2 = iter1->second.begin(); iter2 != iter1->second.end(); ++iter2) {
        std::cout << "Key1: " << iter1->first << ", Key2: " << iter2->first << ", Value: " << iter2->second << std::endl;
    }
}

示例1:统计字符串中每个字符出现的次数

以下代码统计字符串“hello, world”中每个字符出现的次数:

#include <iostream>
#include <map>

int main() {
    std::string str = "hello, world";
    std::map<char, int> charCount;
    for (char c : str) {
        if (c != ' ') {
            charCount[c]++;
        }
    }
    for (std::map<char, int>::iterator iter = charCount.begin(); iter != charCount.end(); ++iter) {
        std::cout << iter->first << ": " << iter->second << std::endl;
    }
    return 0;
}

输出结果为:

,: 1
d: 1
e: 1
h: 1
l: 3
o: 2
r: 1
w: 1

示例2:多个map容器的嵌套实现棋盘

以下代码构建一个9x9的棋盘,其中黑子用字母“B”表示,白子用字母“W”表示:

#include <iostream>
#include <map>

const int BOARD_SIZE = 9;

int main() {
    std::map<int, std::map<int, std::string>> board;
    for (int i = 1; i <= BOARD_SIZE; ++i) {
        for (int j = 1; j <= BOARD_SIZE; ++j) {
            if (i % 2 == 0) {
                board[i][j] = (j % 2 == 0) ? "W" : "B";
            } else {
                board[i][j] = (j % 2 == 0) ? "B" : "W";
            }
        }
    }
    for (int i = 1; i <= BOARD_SIZE; ++i) {
        for (int j = 1; j <= BOARD_SIZE; ++j) {
            std::cout << board[i][j];
        }
        std::cout << std::endl;
    }
    return 0;
}

输出结果为:

BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB
WBWBWBWBW
BWBWBWBWB

以上就是关于C++中map的基本用法和嵌套用法实例分析的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++中map的基本用法和嵌套用法实例分析 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • iOS中UIScrollView嵌套UITableView的实践教程

    iOS中UIScrollView嵌套UITableView的实践教程 在iOS开发中,有时候我们需要在一个UIScrollView中嵌套一个UITableView,以实现更复杂的界面布局和滚动效果。本教程将详细介绍如何实现这一功能,并提供两个示例说明。 步骤一:创建UIScrollView和UITableView 首先,在你的视图控制器中创建一个UIScro…

    other 2023年7月28日
    00
  • 怪物猎人ol 扩散弓选择与使用指南 装填术4蓄测试数据

    怪物猎人OL 扩散弓选择与使用指南 1. 装填术4蓄测试数据简介 装填术4蓄测试数据是怪物猎人OL中扩散弓的一种特殊技能组合。该技能组合可以提高扩散箭的威力和射程,使玩家在战斗中更加有效地击败怪物。 2. 如何选择装填术4蓄测试数据 在选择装填术4蓄测试数据时,需要考虑以下几个因素: 武器属性:不同的武器属性适合不同的怪物。根据目标怪物的弱点和抗性,选择相应…

    other 2023年10月16日
    00
  • iPhone如何开启重新启动功能?苹果手机不用关机直接重启的方法

    iPhone如何开启重新启动功能? 在日常使用中,苹果手机可能会出现各种问题,需要重新启动手机,以使其恢复正常运行。但是,苹果手机并没有像安卓手机那样直接提供重启按钮。本文将详细介绍iPhone如何开启重新启动功能,以便于您更好地管理您的手机。 方法一:开启Assistive Touch Step 1:打开“设置”应用程序,并点击“通用”。 Step 2:向…

    other 2023年6月26日
    00
  • python实现FTP服务器服务的方法

    要实现Python FTP服务器,可以使用Python内置库的 ftplib 和 socketserver,其中 ftplib 用于从客户端连接到FTP服务器,而 socketserver 用于监听服务器上的FTP端口并向客户端提供FTP服务。下面是一个Python实现FTP服务器的完整攻略。 1. 导入库 在Python程序中,我们需要导入如下库来实现FT…

    other 2023年6月27日
    00
  • 一文总结Java获取文件后缀名的所有方法

    一文总结Java获取文件后缀名的所有方法 在Java中,获取文件后缀名的方法有多种,本篇文章将会总结介绍这些方法。 方法一:使用String类型的substring()方法 可以通过String类型提供的substring()方法获取文件名中的后缀名。 示例代码如下: public static String getFileSuffixUsingSubstr…

    other 2023年6月26日
    00
  • java-如何在jwt中正确使用jti声明以防止重放攻击?

    在JWT中,JTI声明是用于唯一标识JWT的声明。正确使用JTI声明可以防止重放攻击,提高JWT的安全性。本文将介绍在Java中正确使用JTI声明的完整攻略,包括基本用法、高级用法和示例说明。 基本用法 在Java中,使用JJWT库创建JWT并添加JTI声明的基本用法如下: import io.jsonwebtoken.Jwts; import io.jso…

    other 2023年5月8日
    00
  • spring中bean的生命周期详解

    这里给出 “spring中bean的生命周期详解” 的完整攻略: 什么是Bean的生命周期? 在 Spring 中,当一个 Bean 被创建出来并可以被容器使用时,会经历以下几个状态,这些状态构成了一个 Bean 的生命周期: Bean 的实例化 Bean 的属性设置 Bean 的初始化 Bean 的销毁 下面我们来详细讲解每个状态。 Bean 的实例化 在…

    other 2023年6月27日
    00
  • C语言深入详解四大内存函数的使用

    C语言深入详解四大内存函数的使用攻略 1. malloc函数 malloc函数用于在堆内存中动态分配指定大小的内存空间,并返回一个指向该内存空间的指针。其函数原型如下: void* malloc(size_t size); 使用示例: #include <stdio.h> #include <stdlib.h> int main() …

    other 2023年8月2日
    00
合作推广
合作推广
分享本页
返回顶部