c++ set/multiset容器

在C++标准库中,set 和 multiset 是两种非常有用的关联容器,它们包含唯一元素(对于set)或可重复元素(对于multiset),并且默认情况下这些元素都是自动排序的。它们通过键(即存储的元素本身)来存储和检索元素,因此这些容器中的元素都是唯一的(对于set)或者可以有重复的(对于multiset)。

以下是setmultiset的一些基本用法:

引入头文件
#include <set>  
#include <iostream>
声明和初始化
// 声明set,自动对int类型元素排序  
std::set<int> s;  // 声明multiset,允许int类型元素重复  
std::multiset<int> ms;  // 初始化  
std::set<int> s = {1, 2, 3, 4, 5};  
std::multiset<int> ms = {1, 2, 2, 3, 3, 3};
插入元素
s.insert(6);  
ms.insert(4);  
ms.insert(4); // 在multiset中,可以插入重复元素
查找元素
if (s.find(3) != s.end()) {  std::cout << "3 is in the set.\n";  
}  // 对于multiset,可以使用count方法来查找元素的数量  
size_t count_of_3 = ms.count(3);  
std::cout << "There are " << count_of_3 << " 3s in the multiset.\n";
遍历元素
for (const auto& elem : s) {  std::cout << elem << " ";  
}  
std::cout << '\n';  for (const auto& elem : ms) {  std::cout << elem << " ";  
}  
std::cout << '\n';
删除元素
s.erase(3); // 删除set中的元素3(如果存在)  
ms.erase(4); // 删除multiset中所有值为4的元素  // 也可以通过迭代器删除元素  
auto it = ms.find(2);  
if (it != ms.end()) {  ms.erase(it); // 删除迭代器指向的元素  
}
其他操作
  • size():返回容器中元素的数量。
  • empty():如果容器为空,则返回true
  • clear():删除容器中的所有元素。
  • lower_bound(key) 和 upper_bound(key):返回指向不小于(大于)给定键的第一个元素的迭代器。这两个函数对于实现范围查找特别有用。
  • 这里详细声明 lower_bound(key) 和 upper_bound(key)
lower_bound(key)

lower_bound(key)函数返回一个迭代器,指向第一个不小于(即大于或等于)key的元素。如果key不在容器中,则返回指向容器中第一个大于key的位置的迭代器,如果容器中没有任何元素大于key,则返回end()迭代器

upper_bound(key)

upper_bound(key)函数返回一个迭代器,指向第一个大于key的元素。如果key不在容器中,或者key是容器中的最后一个元素,则返回end()迭代器。

示例:

假设我们有一个multiset<int>容器ms,包含以下元素:1 2 2 3 4 4 4 5

std::multiset<int> ms = {1, 2, 2, 3, 4, 4, 4, 5};  auto lb = ms.lower_bound(3); // lb指向第一个不小于3的元素,即3  
auto ub = ms.upper_bound(3); // ub指向第一个大于3的元素,即4  // 遍历[lb, ub)范围内的元素  
for (auto it = lb; it != ub; ++it) {  std::cout << *it << ' '; // 输出:3  
}  lb = ms.lower_bound(4); // lb指向第一个不小于4的元素,即4  
ub = ms.upper_bound(4); // ub指向第一个大于4的元素,即5  // 遍历[lb, ub)范围内的元素  
for (auto it = lb; it != ub; ++it) {  std::cout << *it << ' '; // 输出:4 4 4  
}
  • 这两个函数通常用于在有序容器中实现范围查找,特别适用于需要查找一个键的多个相同值的情况(如在multiset中)。
  • 由于setmultiset是自动排序的,所以这些操作的时间复杂度都是对数级别的。

请注意,setmultiset的迭代器是稳定的,这意味着在插入或删除元素时,不会使指向其他元素的迭代器失效(除了指向被删除元素的迭代器)。

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

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

相关文章

异方差的Stata操作(计量114)

以数据集 nerlove.dta 为例&#xff0c;演示如何在 Stata 中处理异方差。 此数据集包括以下变量&#xff1a; tc ( 总成本 ) &#xff1b; q ( 总产量 ) &#xff1b; pl ( 工资率 ) &#xff1b; pk ( 资本的使用成本 ) &#xff1b; pf ( 燃料价格 ) &#xff1b; …

GESP等级大纲

CCF编程能力等级认证概述 CCF编程能力等级认证&#xff08;GESP&#xff09;为青少年计算机和编程学习者提供学业能力验证的规则和平台。GESP覆盖中小学阶段&#xff0c;符合年龄条件的青少年均可参加认证。C & Python编程测试划分为一至八级&#xff0c;通过设定不同等级…

[自动驾驶技术]-6 Tesla自动驾驶方案之硬件(AI Day 2021)

1 硬件集成 特斯拉自动驾驶数据标注过程中&#xff0c;跨250万个clips超过100亿的标注数据&#xff0c;无论是自动标注还是模型训练都要求具备强大的计算能力的硬件。下图是特斯拉FSD计算平台硬件电路图。 1&#xff09;神经网络编译器 特斯拉AI编译器主要针对PyTorch框架&am…

AI数据面临枯竭

Alexandr Wang&#xff1a;前沿研究领域需要大量当前不存在的数据&#xff0c;未来会受到这个限制 Alexandr Wang 强调了 AI 领域面临的数据问题。 他指出&#xff0c;前沿研究领域&#xff08;如多模态、多语言、专家链式思维和企业工作流&#xff09;需要大量当前不存在的数…

压缩能力登顶 小丸工具箱 V1.0 绿色便携版

平常录制视频或下载保存的视频时长往往都很长&#xff0c;很多时候都想要裁剪、 截取出一些“精华片段”保留下来&#xff0c;而不必保存一整个大型视频那么浪费硬盘空间… 但如今手机或电脑上大多数的视频剪辑软件&#xff0c;切割视频一般都要等待很长时间导出或转换&#…

【C语言回顾】编译和链接

前言1. 编译2. 链接结语 上期回顾: 【C语言回顾】文件操作 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【C语言学习】 前言 各位小伙伴大家好&#xff01;上期小编给大家讲解了C语言中的文件操作&#xff0c;接下来我们讲解一下编译和链接&#xff01; 1. 编译 预处理…

H5扫描二维码相关实现

H5 Web网页实现扫一扫识别解析二维码&#xff0c;就现在方法的npm包就能实现&#xff0c;在这个过程中使用过html5-qrcode 和 vue3-qr-reader。 1、html5-qrcode的使用 感觉html5-qrcode有点小坑&#xff0c;在使用的时候识别不成功还总是进入到错误回调中出现类似NotFoundExc…

Python怎样将PDF拆分成多个文件

在 Python 中&#xff0c;你可以使用 PyPDF2 库来拆分 PDF 文件。以下是一个简单的示例&#xff0c;演示如何将一个 PDF 文件拆分为多个单页 PDF 文件。 首先&#xff0c;你需要安装 PyPDF2 库。如果尚未安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install P…

天干物燥小心火烛-智慧消防可视化大屏,隐患防治于未然。

智慧消防可视化大屏通常包括以下内容&#xff1a; 1.实时监控&#xff1a; 显示消防设备、传感器、监控摄像头等设备的实时状态和数据&#xff0c;包括火灾报警、烟雾报警、温度报警等。 2.建筑结构&#xff1a; 显示建筑物的结构图和平面图&#xff0c;包括楼层分布、消防通…

VLC播放器(全称VideoLAN Client)

一、简介 VLC播放器&#xff08;全称VideoLAN Client&#xff09;是一款开源的多媒体播放器&#xff0c;由VideoLAN项目团队开发。它支持多种音视频格式&#xff0c;并能够在多种操作系统上运行&#xff0c;如Windows、Mac OS X、Linux、Android和iOS等。VLC播放器具备播放文件…

特殊变量笔记3

输入一个错误命令, 在输出$? 特殊变量&#xff1a;$$ 语法 $$含义 用于获取当前Shell环境的进程ID号 演示 查看当前Shell环境进程编号 ps -aux|grep bash输出 $$ 显示当前shell环境进程编号 小结 常用的特殊符号变量如下 特殊变量含义$n获取输入参数的$0, 获取当前She…

hugging face笔记:PEFT

1 介绍 PEFT (Parameter-Efficient Fine Tuning) 方法在微调时冻结预训练模型参数&#xff0c;并在其上添加少量可训练的参数&#xff08;称为适配器&#xff09;这些适配器被训练用来学习特定任务的信息。这种方法已被证明在内存效率和计算使用上非常高效&#xff0c;同时能产…

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归&#xff08;普通最小二乘法&#xff09; 一、模型介绍 线性模型是在实践中广泛使用的一类模型&#xff0c;该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&am…

手机卡该地块

package demo; package demo; public class Phonetest { public static void main(String[] args) { Phone pnew Phone(); p.brand"小米"; p.price1998.98; System.out.println(…

在业务开发中使用ElasticSearch的指导手册

文章目录 该业务为什么需要ElasticSearch? / 该业务需要ElasticSearch的核心功能是哪些&#xff1f;正确示例错误示例 如何快速验证分词是否能够满足业务需求&#xff1f;分词不满足&#xff0c;如何自定义分词&#xff1f; 业务数据的字段类型映射是否合理&#xff1f;实践中…

MySQL设置表自增步长

在MySQL数据库管理中&#xff0c;自增字段&#xff08;AUTO_INCREMENT&#xff09;是一种常见且重要的功能&#xff0c;通常用于生成唯一的标识符&#xff08;如主键&#xff09;。然而&#xff0c;在多种应用场景下&#xff0c;默认的自增步长&#xff08;1&#xff09;可能无…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

003 CentOS 7.9 mysql8.3.0安装及配置

文章目录 Windows PowerShell测试端口安装及配置1. 下载MySQL安装包2. 解压安装包3. 安装MySQL4. 启动MySQL服务5. 获取并设置MySQL root密码6. 创建数据库7. 配置远程连接&#xff08;可选&#xff09; 卸载mysql检查并卸载已有的MySQL或MariaDB&#xff1a; https://download…