当前位置: 首页 > news >正文

set/multiset容器、map容器

目录

set/multiset容器

set基本概念

set大小和交换

set插入和删除

查找和统计

set和multiset的区别

改变set排序规则

set存放内置数据类型

set存放自定义数据类型

pair队组

map容器

map容器的基本概念

map构造和赋值

map大小和交换

map插入和删除

map查找和统计

改变map排序规则


set/multiset容器

set基本概念

简介:
        所有元素都会在插入时自动被排序
本质:
        set/multiset属于关联式容器,底层结构是用二叉树实现
set和multiset区别:
        set不允许容器中有重复的元素
        multiset允许容器中有重复的元素

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
using namespace std;void print(const set<int>&L)
{for(set<int>::const_iterator it = L.begin();it!=L.end();it++){cout << *it << " ";}cout << endl;
}int main()
{//set容器特点 所有元素插入时被自动赋值//set容器不允许插入重复值set<int> s1;s1.insert(40);s1.insert(10);s1.insert(20);s1.insert(60);print(s1);set<int> s2(s1);print(s2);set<int> s3;s3 = s1;print(s3);return 0;
}

编译运行

set大小和交换

size();//返回容器中元素的个数
empty();//判断容器是否为空empty();
swap(st);//交换两个集合容器

set插入和删除

insert(elem);//在容器中插入元素
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end);//删除区间[beg,end)的所有元素,返回下一个元素的选代器
erase(elem);//删除容器中值为elem的元素

查找和统计

find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);//统计key的元素个数

set和multiset的区别

        set不允许容器中有重复的元素
        multiset允许容器中有重复的元素

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
using namespace std;int main()
{set<int> s1;s1.insert(40);s1.insert(10);s1.insert(20);s1.insert(60);s1.insert(60);for(set<int>::const_iterator it = s1.begin();it!=s1.end();it++){cout << *it << " ";}cout << endl;multiset<int> s2;s2.insert(40);s2.insert(10);s2.insert(20);s2.insert(60);s2.insert(60);for(multiset<int>::const_iterator it = s2.begin();it!=s2.end();it++){cout << *it << " ";}cout << endl;return 0;
}

编译运行

改变set排序规则

set存放内置数据类型

set容器默认排序是从小到大排序 利用仿函数可以改变set容器排序规则

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
using namespace std;class person
{
public:bool operator()(int v1,int v2){return v1 > v2;}
};int main()
{//默认从小到大排序set<int> s1;s1.insert(40);s1.insert(10);s1.insert(20);s1.insert(60);for(set<int>::const_iterator it = s1.begin();it!=s1.end();it++){cout << *it << " ";}cout << endl;//指定排序规则set<int,person> s2;s2.insert(40);s2.insert(10);s2.insert(20);s2.insert(60);for(set<int,person>::const_iterator it = s2.begin();it!=s2.end();it++){cout << *it << " ";}cout << endl;return 0;
}

编译运行

set存放自定义数据类型

对于自定义类型,set必须指定排序规则才能插入元素

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
using namespace std;class person
{
public:person(string name,int age){this->age = age;this->name = name;}int age;string name;
};class compare
{
public:bool operator()(const person &p1,const person &p2){//年龄降序return p1.age > p2.age;}
};void test01()
{person p1("张三",20);person p2("李四",28);person p3("王五",17);set<person,compare> s;s.insert(p1);s.insert(p2);s.insert(p3);for(set<person,compare>::const_iterator it = s.begin();it!=s.end();it++){cout <<"姓名: " << it->name<< "年龄: "<<it->age;}cout << endl;
}int main()
{test01();return 0;
}

pair队组

pair<type,type>p ( value1,value2 );
pair<type,type>p = make pair( value1,value2);

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
using namespace std;int main()
{pair<string,int>p1("tom",20);cout << "姓名: "<<p1.first<<"年龄: " <<p1.second << endl;pair<string,int>p2 = make_pair("tom",20);cout << "姓名: "<<p2.first<<"年龄: " <<p2.second << endl;return 0;
}

map容器

map容器的基本概念

     简介

        map中所有元素都是pair
        pair中第一个元素为key (键值),起到索引作用,第二个元素为value (实值)
        所有元素都会根据元素的键值自动排序
本质:

        map/multimap属于关联式容器,底层结构是用二叉树实现
优点:

        可以根据key值快速找到value值
map和multimap区别:

        map不允许容器中有重复kev值元素
        multimap允许容器中有重复key值元素

map构造和赋值

map<T1,T2> mp;//map默认构造函数

map(const map &mp);//拷贝构造函数

map& operator=(const map &mp); //重载等号操作符

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
using namespace std;void print(map<int,int>&m)
{for(map<int,int>::iterator it = m.begin();it!= m.end();it++){cout << "key: "<<it->first << "value: "<<it->second<<endl; }cout << endl;
}void test01()
{map<int,int> m;m.insert(pair<int,int>(1,10));	m.insert(pair<int,int>(3,20));m.insert(pair<int,int>(2,30));m.insert(pair<int,int>(4,40));//根据key值自动排序print(m);
}int main()
{test01();return 0;
}

map大小和交换

size();//返回容器中元素的数目
empty();//判断容器是否为空
swap(at);//交换两个集合容器

map插入和删除

insert(elem);//在容器中插入元素
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end);//删除区间[beg,end)的所有元素,返回下一个元素的迭代器
erase(key);//删除容器中值为key的元素

void test01()
{
    map<int,int> m;

    //插入元素

    m.insert(pair<int,int>(1,10));    

    m.insert(make_pair(2,20));

    m.insert(map<int,int>::value_type(3,30);

    m[4] = 40;//不建议插数使用 可以利用key访问到value

    
    m.erase(m.begin());//删除迭代器所指的元素,返回下一个元素的迭代器
    m.erase(m.begin(),m.end());//删除区间[beg,end)的所有元素,返回下一个元素的迭代器
    m.erase();//删除容器中值为key的元素
    m.clear();//清除所有元素
}

map查找和统计

find(key);查找key是否存在,若存在,返回该键的元素的迭代器:若不存在,返回set.end();

count(key);//统计计key的元素个数

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
using namespace std;void test01()
{map<int,int> m;m.insert(pair<int,int>(1,10));m.insert(pair<int,int>(2,20));m.insert(pair<int,int>(3,30));map<int,int>::iterator pos = m.find(3);//查找key为3的元素 返回该元素的迭代器if(pos != m.end()){cout <<"查到了元素 key = "<< (*pos).first << "value = "<< pos->second << endl;}
}
int main()
{test01();return 0;
}

改变map排序规则

map容器默认排序是从小到大排序 利用仿函数可以改变map容器排序规则

#include <iostream>
#include <string.h>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <deque>
#include <bitset>
#include <ctime>
#include <stack>
#include <queue>
#include <list>
#include <set>
#include <map>
using namespace std;class person
{
public:bool operator()(int v1,int v2){return v1 > v2;}
};int main()
{//默认从小到大排序map<int,int> m;m.insert(pair<int,int>(1,10));	m.insert(pair<int,int>(3,30));	m.insert(pair<int,int>(2,20));	for(map<int,int>::const_iterator it = m.begin();it!=m.end();it++){cout << "key: "<<it->first << " ";}cout << endl;//指定排序规则map<int,int,person> m1;m1.insert(pair<int,int>(1,10));	m1.insert(pair<int,int>(3,30));	m1.insert(pair<int,int>(2,20));for(map<int,int,person>::const_iterator it = m1.begin();it!=m1.end();it++){cout << "key: "<<it->first << " ";}cout << endl;return 0;
}

相关文章:

set/multiset容器、map容器

目录 set/multiset容器 set基本概念 set大小和交换 set插入和删除 查找和统计 set和multiset的区别 改变set排序规则 set存放内置数据类型 set存放自定义数据类型 pair队组 map容器 map容器的基本概念 map构造和赋值 map大小和交换 map插入和删除 map查找和统计…...

Linux系统编程——总结初识Linux(常用命令、特点、常见操作系统)

文章目录 UNIX操作系统&#xff08;了解&#xff09;Linux操作系统主要特征Linux和unix的区别和联系什么是操作系统常见的操作系统Ubuntu操作系统Ubuntu安装linux下的目录的类型(掌握)shell指令shell指令的格式文件操作相关指令系统相关命令网络相关命令其他命令软件安装相关的…...

Js使用ffmpeg进行视频剪辑和画面截取

ffmpeg 使用场景是需要在web端进行视频的裁剪&#xff0c;包括使用 在线视频url 或 本地视频文件 的裁剪&#xff0c;以及对视频内容的截取等功能。 前端进行视频操作可能会导致性能下降&#xff0c;最好通过后端使用java&#xff0c;c进行处理&#xff0c;本文的案例是备选方…...

Linux基本命令,基础知识

进到当前用户目录&#xff1a;cd ~ 回到上级目录:cd .. 查看当前目录层级:pwd 创建目录:mkdir mkdir ruanjian4/linux/zqm41 -p级联创建文件夹(同时创建多个文件夹需要加-p) 查看详细信息:ls -l (即 ll) 查看所有详细信息:ls -al 隐藏文件是以.开头的 查看&#xff1a;l…...

【Android知识笔记】进程通信(三)

在上一篇探索Binder通信原理时,提到了内存映射的概念,其核心是通过mmap函数,将一块 Linux 内核缓存区映射到一块物理内存(匿名文件),这块物理内存其实是作为Binder开辟的数据接收缓存区。这里有两个概念,需要理解清楚,那就是操作系统中的虚拟内存和物理内存,理解了这两…...

云上亚运:所使用的高新技术,你知道吗?

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 目录 前言 一.什么是云上亚运会 二.为什么要使用云…...

数据结构简述,时间、空间复杂度,学习网站推荐

目录 IT 学习路线 相关坚韧大厚书 相关有趣/耐看书或视频 数据结构与算法学习网站推荐 刷题 时间、空间复杂度 数据结构简述 基本概念 数据结构与算法简述和CS综述整理。本文非基础的教程&#xff0c;本文会列出大量学习和参考网站。老惯例&#xff0c;一个文章是一个集…...

在线安装qt5.15之后任意版本

下载qt现在安装包&#xff1a; window安装包链接 进入cmd&#xff0c;用命令行打开安装包&#xff0c;并指定组件下载地址&#xff08;这个是关键&#xff0c;之前用的是腾讯镜像&#xff0c;出现了版本灰色无法选中问题&#xff09; .\qt-unified-windows-x64-4.6.1-online…...

【kafka实战】01 3分钟在Linux上安装kafka

本节采用docker安装Kafka。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来&#xff0c;不得不说真的很方便啊&#xff0c;好了&#xff0c;开搞。使用前提&#xff1a;Linux虚拟机&…...

yum安装mysql8

记录一下安装过程用于后面项目参考 目录 说明安装步骤yum安装默认目录修改默认的数据目录必要的my.cnf属性修改卸载Mysql 说明 一般情况下都是docker安装&#xff0c;部分特殊情况下&#xff0c;例如老外的项目部分禁用docker&#xff0c;那一般二进制安装或者yum直接安装。 …...

十五)Stable Diffusion使用教程:另一个线稿出3D例子

案例:黄金首饰出图 1)线稿,可以进行色阶加深,不易丢失细节; 2)文生图,精确材质、光泽、工艺(抛光、拉丝等)、形状(包括深度等,比如镂空)和渲染方式(3D、素描、线稿等)提示词,负面提示词; 3)seed调-1,让ai随机出图; 4)开启controlnet,上传线稿图,选择cann…...

2023icpc网络预选赛I. Pa?sWorD(dp)

题目给定字符串长度n以及字符串s 其中出现小写字母可以代表小写字母和大写字母 比如a可以代表a和A 出现?可以代表26个小写字母和26个大写字母和10个数字 出现大写字母和数字就是原本的数 同时要求大写字母&#xff0c;小写字母&#xff0c;数字一定都存在替换完的字符串中…...

maven本地安装jar包

在实际开发中&#xff0c;有些jar包不能通过公共库下载&#xff0c;只能本地安装。可以按照以下步骤操作&#xff1a; 1、安装命令 mvn install:install-file -DgroupIdcom.chinacreator.sm -DartifactIdfbm-sm-common -Dversion0.0.1 -Dpackagingjar -Dfile../newJar/fbm-sm…...

QT中的inherits

目录 简介&#xff1a; 实例&#xff1a; 简介&#xff1a; 在Qt中&#xff0c;可以使用inherits函数来判断一个对象是否属于某个类或其派生类。inherits函数是QObject类的成员函数&#xff0c;因此只能用于继承自QObject的类的对象。 以下是inherits函数的一般用法&#xf…...

全国职业技能大赛云计算--高职组赛题卷①(容器云)

全国职业技能大赛云计算--高职组赛题卷①&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…...

基于springboot+vue的入校申报审批系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

安卓逆向 - EdXposed LSPosed VirtualXposed

一、引言 接上篇&#xff1a;安卓逆向 - Xposed入门教程_小馒头yy的博客-CSDN博客 我们介绍了Xposed入门安装使用&#xff0c;但是只支持到Android 8&#xff0c;并且安装模块需要重启。今天我们来看看Xposed的其他版本。 二、各种Xposed框架对比 1、Xposed 只支持到安卓8&…...

Linux三大搜索指令的区别

find&#xff1a;可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下&#xff0c;/usr/bin,搜索指令文件 例如&#xff1a;which ls whereis:在系统特定的路径下查找&#xff0c;既可以找到可执行程序&#xff…...

C++ -- 特殊类设计

目录 设计一个类&#xff0c;不能被拷贝 C98的做法 C11的做法 设计一个类&#xff0c;只能在堆上创建对象 实现方式1 实现方式2 设计一个类&#xff0c;只能在栈上创建对象 实现方式1 方式1的优化 实现方式2 设计一个类&#xff0c;不能被继承 设计模式 什么是设计…...

指针和数组笔试题的透析

指针---进阶篇&#xff08;三&#xff09; 一、前言二、一维数组例题透析&#xff1a;三、指针笔试题1.例一&#xff1a;2.例二&#xff1a;3.例三&#xff1a;4.例四&#xff1a;5.例五&#xff1a;6.例六&#xff1a; 一、前言 那么好了好了&#xff0c;宝子们&#xff0c;从…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...