C++set关联式容器

C++set

1. 关联式容器

vector、list、deque、forward_list(C++11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的,与序列式容器不同的是,关联式容器里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。map和set的键是唯一的,但是mutimap和multiset支持多个同名且有不同映射的键共存。

2. 键值对

用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value, key代表键值,value表示与key对应的信息。比如:学生的姓名和他的学号是一一对应的,那么就可以通过查找学生的姓名来查找到对应的学号。set容器是Key结构。set不允许存在相同的key(multiset除外),且key不可修改(因为会破坏内部的红黑树结构)。

3.set容器

形参含义:

T:键值对应value的类型
Compare:比较器的类型,缺省情况下按照小于来比较,一般情况下(内置类型元索)该参数不需要传递,如果无法比较时(自定义类型),需要用户自己显式传递比较规则(一般情况下按照函数指针或者仿函数来传递)
Alloc:通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的空间配置器

4.set的成员函数

4.1 map的成员函数介绍

set的构造:

函数声明功能介绍
sets()构造一个空的set

set的迭代器:

函数声明功能介绍
begin()end()begin:首元素的位置;end:下一个元素的位置
cbegin()cend()c指const,cbegin和cend指向的内容不能修改
rbegin()rend()反向迭代器,rbegin从end开始,rend从begin开始,其++和–的方向相反
crbegin()crend()与前一个功能相同,但指向的内容不能修改

set的容量与元素访问:

函数名函数声明功能介绍
emptybool empty() const检测set中的元素是否为空,为空返回ture,不为空返回false
sizesize_type size() const返回set中有效元素的个数

set的修改:

函数名函数声明功能介绍
insertpair<iterator,bool> insert (const value_type& val)在set中插入键值对x,注意x是一个键值对,返回值也是键值对;iterator代表新插入元素的位置,bool代表插入成功
erasevoid erase (iterator position)删除position位置上的元素
size_type erase (const value_type& val)删除键值为x的元素
void erase (iterator first, iterator last)删除**[first,last)**区间中的元素
swapvoid swap (set& x)交换两个set中的元素
clearvoid clear()删除set里所有的元素

set的比较:

函数名函数声明功能介绍
key_comp
value_comp

set的操作:

函数名函数声明功能介绍
finditerator find (const value_type& val) const搜索set里键等于k的元素,如果找到返回一个映射的迭代器,找不到返回end的迭代器,find函数默认查找中序的第一个相等的值
countsize_type count (const value_type& val) const搜索set里键等于k的元素,找到返回1,找不到返回0
lower_bounditerator lower_bound (const value_type& val) const在set里找>=k的元素,返回符合情况的最小键的迭代器
upper_bounditerator upper_bound (const value_type& val) const在set里找>k的元素,返回符合情况的最小键的迭代器
equal_rangepair<iterator,iterator> equal_range (const value_type& val) const

5. multimap和multiset

mutiset(map)相等的值可以在左孩子也可以在右孩子(会调整树的结构,无所谓插在哪里)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度盘点在当今经济形势下资深项目经理或PMO的或去或从

在当今经济形势下&#xff0c;资深项目经理&#xff08;Project Manager&#xff09;或项目管理办公室&#xff08;PMO&#xff09;的去向和选择受到多种因素的影响。以下是对他们可能面临的或去或从的深度盘点&#xff1a; 1、发展去向 1. 深化专业领域&#xff1a;在经济形势…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

CSAP_MAT_BOM_MAINTAIN 返回消息处理

CSAP_MAT_BOM_MAINTAIN是创建修改BOM的函数&#xff0c;但这个函数的返回参数中没有消息返回。 需要在调用前使用函数&#xff1a; CALL FUNCTION CALO_INIT_APIEXPORTINGdata_reset_sign EXCEPTIONSlog_object_not_found 1log_sub_object_not_found 2other_e…

QT笔记 - QPainter 填充环形区域(甜甜圈)

以矩形为例&#xff1a; QPainter painter(this);// painter.setPen(Qt::blue);// painter.setFont(QFont("Arial",30));// painter.drawText(rect(),Qt::AlignCenter,"Hello Qt!!!");QRect rect QRect(50, 50, 400, 400);QRect box QRect(100, 100, 105…

TS-抽象类和静态成员

目录 1&#xff0c;抽象类1&#xff0c;为什么需要抽象类2&#xff0c;抽象成员3&#xff0c;设计模式-模板模式 2&#xff0c;静态成员1&#xff0c;什么是静态成员2&#xff0c;设计模式-单例模式 1&#xff0c;抽象类 1&#xff0c;为什么需要抽象类 有时&#xff0c;某个…

Java面试八股之Java中有哪些原子类,原理是什么

Java中有哪些原子类&#xff0c;原理是什么 AtomicInteger 和 AtomicLong&#xff1a; 用于对整数&#xff08;int&#xff09;和长整数&#xff08;long&#xff09;进行原子操作。 原理&#xff1a;它们内部封装了一个整型或长整型变量&#xff0c;并通过使用Unsafe类提供…

HarmonyOS - 记一次HSP异常堆栈无法定位问题

问题背景 HSP混淆打包之后无法定位异常堆栈&#xff0c;问题堆栈为&#xff1a; MyModules/build/default/cache/default/defaultCompileArkTS/esmodule/release/MyModules/src/main/ets/d/r.ts:1:1 问题原因&#xff1a; 导致无法定位问题的原因是&#xff0c;混淆时开启了代码…

OpenHarmony 实战开发——ArkUI容器类API介绍

容器类&#xff0c;顾名思义就是存储的类&#xff0c;用于存储各种数据类型的元素&#xff0c;并具备一系列处理数据元素的方法。在 ArkUI 开发框架中&#xff0c;容器类采用了类似静态的语言来实现&#xff0c;并通过 NAPI 框架对外提供。通过对存储位置以及属性的限制&#x…

关于数据结构B+TREE 和 HASH的整理

一、BTREE BTree是一种树数据结构&#xff0c;是B-Tree的变种&#xff0c;属于n叉排序树&#xff0c;每个节点通常有多个孩子。 BTree是和B-Tree相比&#xff0c;BTree的所有的数据都会出现在叶子节点上&#xff0c;并且叶子节点会形成一个单向链表&#xff0c;非叶子节点仅仅…

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…

日期问题,

日期问题 ac代码 #include <cstdio> #include <iostream>using namespace std;int days[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check_valid(int year, int month, int day) {if (month 0 || month > 12) return false;if (day 0) …

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16&#xff08;半精度浮点&#xff09;或者INT8&#xff08;8位定点整数&#xff09;&#xff0c;但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32&#xff08;32位…

求数组最大值

#include <bits/stdc.h> using namespace std; int main(){int a[4]{1,2,3,4};cout<<*max_element(a,a4);return 0; }

策略模式详解

策略模式 1 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进…

JavaScript的跳转传参方式

在JavaScript中&#xff0c;页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法&#xff1a; 1.URL参数&#xff08;Query String&#xff09; 这是最常见的方式&#xff0c;通过在URL的末尾添加参数来实现。例如&#xff1a; javascriptwindow.loc…

gitlab webhook触发jenkins任务

配置jenkins 安装gitlab插件 配置jenkins job 选择gitlab webhook触发 在高级中生成token 代码仓设置 新增webhook 配置webhook 测试连接 缺点&#xff0c;不能带gitLab事件的参数&#xff01;&#xff01;&#xff01;

Spark RDD案例:统计网站每月访问量

这个项目利用Spark技术&#xff0c;通过统计网站访问记录中的日期信息&#xff0c;实现了对每月访问量的统计和排序。通过分析数据&#xff0c;我们可以了解到不同月份的网站访问情况&#xff0c;为进一步优化网站内容和推广策略提供数据支持。 使用Spark统计网站每月访问量 …

Apache2.4和PHP8的量子纠缠

Apache不建议你用&#xff0c;PHP建议使用

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…