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

yizhihongxing

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日

相关文章

  • Jmeter 中 CSV 如何参数化测试数据并实现自动断言示例详解

    JMeter中参数化测试数据并实现自动断言的完整攻略 以下是使用JMeter实现参数化测试数据并实现自动断言的完整攻略: 步骤1:准备CSV文件 首先,您需要准备一个包含测试数据的CSV文件。该文件将包含您要使用的参数化数据。确保CSV文件的格式正确,并且每行数据对应一个测试用例。 步骤2:配置CSV数据集配置元件 在JMeter中,您可以使用CSV数据集配…

    other 2023年10月16日
    00
  • MAC 系统安装java并配置环境变量

    安装 Java 1.从官网下载 JDK 安装包 首先,需要从 Java 官网下载 Mac 版本的 JDK 安装包(JDK 是 Java Development Kit 的缩写,提供了一组工具和 API,用于开发 Java 应用程序)。下载地址为:https://www.oracle.com/java/technologies/downloads/#jdk-m…

    other 2023年6月27日
    00
  • 易语言解析音悦台MV提供超清下载地址的代码

    易语言解析音悦台MV提供超清下载地址的代码攻略 简介 本攻略将详细讲解如何使用易语言编写代码来解析音悦台MV并提供超清下载地址。音悦台是一个流行的音乐MV分享平台,但官方并未提供超清下载选项。通过解析音悦台的页面,我们可以获取到超清下载地址,并将其提供给用户。 步骤 步骤一:获取音悦台MV页面源码 首先,我们需要获取音悦台MV的页面源码。可以使用易语言提供的…

    other 2023年8月4日
    00
  • 易语言的即时输入提示使用方法

    易语言的即时输入提示使用方法攻略 简介 即时输入提示是易语言中一个非常有用的功能,它可以在用户输入时提供自动补全和建议。这个功能可以大大提高用户的输入效率和准确性。本攻略将详细介绍易语言的即时输入提示的使用方法。 步骤 步骤一:创建输入框和列表框 首先,我们需要创建一个输入框和一个列表框。输入框用于用户输入,列表框用于显示即时输入提示的建议。 inputbo…

    other 2023年8月15日
    00
  • Docker容器修改配置文件的实现

    下面是Docker容器修改配置文件的实现完整攻略: 1. 查看容器配置文件 首先需要进入Docker容器内部来查看需要修改的配置文件。有两种方式可以进入容器内部: 1.1. Docker attach命令 使用docker exec -it <container_name> /bin/bash命令进入容器,通过cd命令切换到配置文件所在的目录,使…

    other 2023年6月25日
    00
  • easyui-textbox

    easyui-textbox的完整攻略 easyui-textbox是easyui框架中的一个文本框控件,它提供了丰富的功能和属性,可以满足各种文本输入需求。本文将介绍easyui-textbox的使用方法和常用属性,包括两个示例说明。 easyui-textbox的使用方法 在使用easyui-textbox时,我们需要引入easyui框架,并在HTML中…

    other 2023年5月9日
    00
  • 全面解析PHP面向对象的三大特征

    PHP中面向对象编程有三大特征:封装、继承和多态。 封装 封装是指将对象的属性和方法封装在类中,并对外部数据提供访问接口,通过这些接口来控制外部数据的使用。在PHP中,可以通过访问修饰符(public、protected、private)来限制属性和方法的访问权限。 示例 class Person { private $name; public functi…

    other 2023年6月26日
    00
  • css样式找到兄弟节点

    简介 在CSS中,我们可以使用选择器来选择元素并应用样式。在本攻略中,我们将介绍如何使用CSS选择器找到兄弟节点,并提供两个示例说明。 兄弟选择器 在CSS中,我们可以使用兄弟选择器(~)来选择元素的兄弟节点。兄弟选择器选择与指定元素相邻的所有兄弟元素。 以下是兄弟选择器的语法: element1 ~ element2 { /* CSS样式 */ } 在上面…

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