C++ std::map几种遍历方式(正序、倒序)

2024-02-05 03:36

本文主要是介绍C++ std::map几种遍历方式(正序、倒序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++ std::map几种遍历方式(正序、倒序)

文章目录

  • C++ std::map几种遍历方式(正序、倒序)
    • 1、map 的定义方式
    • 2、正序遍历 map
      • 2.1 使用 for 循环
      • 2.2 使用 while 循环
    • 3、倒序遍历 map
      • 3.1 使用 for 循环
      • 3.2 使用 while 循环
    • 4、使用 std::greater 属性,直接定义倒序存储的 map
      • 4.1 使用 for 循环
      • 4.2 使用 while 循环

1、map 的定义方式


//默认定义格式(默认按key升序存储): key, value,其中key可以是任意类型
std::map<std::uint32_t, std::string> myMap;  //key 值为 std::uint32_t 类型
std::map<std::string, std::string> myMap;    //key 值为 std::string 类型//指定数据按key升序存储
std::map<std::uint32_t, std::string, std::greater<std::uint32_t> > myMap; //指定数据按key升序存储
std::map<std::uint32_t, std::string, std::less<std::uint32_t> > myMap; 

2、正序遍历 map

注意:正序使用的是 std::map<std::uint32_t, std::string>::iterator, 倒序使用的是:std::map<std::uint32_t, std::string>::reverse_iterator。

2.1 使用 for 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};// 使用迭代器倒序遍历mapstd::map<std::uint32_t, std::string>::iterator iter;for (iter = myMap.begin(); iter != myMap.end(); ++iter) {std::cout << iter->first << " => " << iter->second << '\n';}return 0;
}

2.2 使用 while 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};std::map<std::uint32_t, std::string>::iterator iter = myMap.begin(); // 使用迭代器倒序遍历mapwhile (iter != myMap.end()) {std::cout << iter->first << " => " << iter->second << '\n';++it;}return 0;
}

3、倒序遍历 map

注意:正序使用的是 std::map<std::uint32_t, std::string>::iterator, 倒序使用的是:std::map<std::uint32_t, std::string>::reverse_iterator。

3.1 使用 for 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};// 使用迭代器倒序遍历mapstd::map<std::uint32_t, std::string>::reverse_iterator iter;for (iter = myMap.rbegin(); iter != myMap.rend(); ++iter) {std::cout << iter->first << " => " << iter->second << '\n';}return 0;
}

3.2 使用 while 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};std::map<std::uint32_t, std::string>::reverse_iterator iter = myMap.rbegin(); // 使用迭代器倒序遍历mapwhile (iter != myMap.rend()) {std::cout << iter->first << " => " << iter->second << '\n';++it;}return 0;
}

4、使用 std::greater 属性,直接定义倒序存储的 map

注意:正序使用的是 std::map<std::uint32_t, std::string>::iterator, 倒序使用的是:std::map<std::uint32_t, std::string>::reverse_iterator。

4.1 使用 for 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string, std::greater<std::uint32_t> > myMap = {{1, "one"}, {2, "two"}, {3, "three"}};// 使用迭代器倒序遍历mapstd::map<std::uint32_t, std::string>::iterator iter;for (iter = myMap.begin(); iter != myMap.end(); ++iter) {std::cout << iter->first << " => " << iter->second << '\n';}return 0;
}

4.2 使用 while 循环


#include <iostream>
#include <map>int main()
{std::map<std::uint32_t, std::string, std::greater<std::uint32_t> > myMap = {{1, "one"}, {2, "two"}, {3, "three"}};std::map<std::uint32_t, std::string>::iterator iter = myMap.begin(); // 使用迭代器倒序遍历mapwhile (iter != myMap.end()) {std::cout << iter->first << " => " << iter->second << '\n';++it;}return 0;
}

这篇关于C++ std::map几种遍历方式(正序、倒序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679645

相关文章

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a