C++中map和set的简介

2024-09-04 22:28
文章标签 c++ set map 简介

本文主要是介绍C++中map和set的简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关联式容器

vector,list,deque等容器统称序列式容器,里面储存的是元素本身。而关联式容器中储存的是<key,value> 的键值对,在数据检索时比序列式容器的效率更高

键值对

键值对是用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value代表与key对应的信息

树形结构的关联式容器

C++中的STL实现了两种不同结构的关联式容器,树形结构和哈希结构。树形结构的关联式容器主要有四种,map,set,multimap,multiset

set

1.set是按照一定次序存储元素的容器

2.在set中,元素的value也标识它,value就是key,其类型为T,并且每个value是唯一的。set中的元素不能在容器中修改(容器总是const),但是可以在容器中插入和删除它们

3.set通过key访问单个元素的速度通常比unordered_set慢,但它允许根据顺序直接对子集进行迭代

4.在set中,总是按照其内部比较对象,所指定的特定弱排序准则进行排序

5.set在底层是用二叉搜索树(红黑树来实现的)

注意事项:

1.map/multimap中储存的是真正的<key,value>键值对,set中只放value,但在底层存放的实际是<value,value>键值对

2.set中插入元素时,只需要插入value即可,不需要构造键值对

3.set可以用于去重,set中的元素不能重复

4.使用set的迭代器遍历set中的元素,可以得到有序序列

5.set中的元素默认按照小于来比较

6.set中查找某个元素,时间复杂度为log2(N)

map

1.map是关联式容器,按照key来比较

2.在map中,key用来排序,和唯一标识元素,value中储存与key关联的内容,key与value的类型可能不同

3.在map中,通过键值访问单个元素的速度通常比unordered_map慢,但map允许根据顺序对元素直接进行迭代

4.map支持下标访问,即在[ ]中放入key,就可以找到与key对应的value

5.map由平衡二叉搜索树(红黑树)来实现

multiset

与set的区别是,multiset中的元素可以重复

multimap

与map的区别是,multimap中的key可以重复,multimap中没有重载operator[ ]

这篇关于C++中map和set的简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c