首页 > 其他分享 >STL用法总结(二)(deque,map,set)

STL用法总结(二)(deque,map,set)

时间:2024-07-29 20:28:47浏览次数:10  
标签:返回 map set 迭代 deque 元素 mp

4.deque(双端队列)

1.介绍

首尾都可插入和删除的队列为双端队列

#include<deque> //初始化定义 deque<int> dq;

2.方法函数

代码含义
q.push_back(x) /pusu_front(x)把x插入队尾 /队首
q.back() /front()返回队尾 /队首元素
q.pop_back() /pop_front()删除队尾 /队首元素
q.erase(iterator it)删除双端队列的某一元素
q.erase(iterator fi,iterator last)删除[fi,last)中的元素
q.empty()判断是否为空
q.size()返回deque元素数量
q.clear()清空deque

3.注意

deque可以排序

双端队列排序一般不用,感觉毫无用处,使用其他STL依然可以实现相同功能

//从小到大
 sort(q.begin(), q.end())
 //从大到小排序 
sort(q.begin(), q.end(), greater<int>());
//deque里面的类型需要是int型 
sort(q.begin(), q.end(), greater());//高版本C++才可以用

5.map

1.介绍

映射类似于函数的对应关系,每个x对应一个y,而map是每个键对应一个值。

//头文件 
#include<map>
 //初始化定义 
map<string, string> mp; 
map<string, int> mp; 
map<int, node> mp;//node是结构体类型

map特性:map会按照键的顺序从小到大自动排序,键的类型必须可以比较大小

2.方法函数

代码含义
mp.find(key)返回键为key的映射的迭代器 O(logN) 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回mp.end()
mp.erase(it)删除迭代器对应的键和值
mp.erase(key)根据映射的键删除键和值
mp.erase(first,last)删除[first,last)对应的键和值O(last-first)
mp.size()返回映射的对数
mp.clear()清空所有元素
mp.insert()插入元素,插入要构造的键值对
mp.empty()如果mp为空返回true,否则false
mp.begin()返回mp中第一个元素迭代器(地址)
mp.end()返回尾部迭代器(最后元素的下一个地址)
mp.rbegin()返回mp最后一个元素的迭代器(地址)
mp.rend()返回mp第一个元素前面的逆向迭代器
mp.count(key)查看元素是否存在,因为键是唯一的,存在返回1,否则为 0
mp.lower_bound()返回一个迭代器,指向键值>=key的第一个元素
mp.upper_bound()返回一个指向键值>key的第一个元素

查找元素是否存在时,可以使用 ①mp.find()mp.count()mp[key] 但是第三种情况,如果不存在对应的key时,会自动创建一个键值对(产生一个额外的键值对空间) 所以为了不增加额外的空间负担,最好使用前两种方法

3.遍历

1.mp.begin()和mp.end()

正向遍历

map<int,int> mp;
 mp[1] = 2; 
mp[2] = 3;
 mp[3] = 4;
 auto it = mp.begin(); 
while(it != mp.end()) { 
cout << it->first << " " << it->second << "\n";
 it ++; }

结果

1 2 2 3 3 4

2.mp.rbegin()和mp.rend()

用于逆向遍历

map<int,int> mp; 
mp[1] = 2;
 mp[2] = 3;
 mp[3] = 4; 
auto it = mp.rbegin(); 
while(it != mp.rend()) {
 cout << it->first << " " << it->second << "\n"; it ++; }

结果:

3 4 2 3 1 2

也可用智能指针

for(auto i : mp) 
cout << i.first << " " << i.second << endl;//键,值

4.二分查找

二分查找lower_bound()upper_bound()

map的二分查找以第一个元素(即键为准),对进行二分查找 返回值为map迭代器类型

include<bits/stdc++.h> using namespace std;
int main() { 
map<int, int> m{{1, 2}, {2, 2}, {1, 2}, {8, 2}, {6, 2}};//有序
 map<int, int>::iterator it1 = m.lower_bound(2);
 cout << it1->first << "\n";//it1->first=2
 map<int, int>::iterator it2 = m.upper_bound(2); 
cout << it2->first << "\n";//it2->first=6 
return 0; }

6.set

1.介绍

set容器中的元素不会重复,当插入集合中已有的元素时,并不会插入进去,而且set容器里的元素自动从小到大排序。

即:set里面的元素不重复 且有序

//头文件
#include<set> 
//初始化定义 
set<int> s;
代码含义
s.begin()返回set第一个元素地址(迭代器)
s.end()返回容器最后一个元素的下一个地址
s.rbegin()返回逆序迭代器,指向容器最后一个元素位置
s.rend()返回逆序迭代器,指向第一个元素前面的位置
s.clear()删除所有元素,返回unsigned int类型O(n)
s.empty()判断容器是否为空
s.insert()插入一个元素
s.size()返回当前元素个数
erase(iterator)删除iterator指向的值
erase(first,second)删除first和second之间的值
erase(key_value)删除key_value的值
查找
s.find(ele)查找set中某一元素,有就返回该元素的迭代器,无返回结束迭代器
s.count(ele)查找set中元素出现个数,因为元素唯一,相当于查询ele是否出现
s.lower_bound(k)返回大于k的第一个元素的迭代器O(logN)
s.upper_bound(k)返回大于k的第一个元素的迭代器

2.遍历

1.迭代器访问

for(set<int>::iterator it = s.begin(); it != s.end(); it++) 
cout << *it << " ";`

2.智能指针

for(auto i : s)
 cout << i << endl;

3.重载<运算符

1.改变set排序规则

set中默认使用less比较器,即从小到大排序。(常用)

set<int> s1; // 默认从小到大排序
 set<int, greater<int> > s2; // 从大到小排序

2.自定义比较规则

set<int, function<bool(int, int)>> s([&](int i, int j){
 return i > j; // 从大到小
 }); 
for(int i = 1; i <= 10; i++)
 s.insert(i); 
for(auto x : s)
 cout << x << " ";

标签:返回,map,set,迭代,deque,元素,mp
From: https://blog.csdn.net/2301_80304432/article/details/140780206

相关文章

  • 调和阶段setState干了什么?
    调和阶段:在react中,当组件的props或state发生变化时,react会开始一个新的渲染过程。这个渲染过程包括几个阶段,其中之一就是调和阶段。在这个阶段,react会比较新旧虚拟DOM树之间的差异,并计算出需要更新的最小集合。setState干了什么?触发更新:当你调用setState时,你实际是告诉Re......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-14 SPI MASET发送程序设计
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述SPI的发送器驱动......
  • 编译安卓系统源码时,执行 source build/envsetup.sh 的目的
    在编译安卓系统源码时,执行sourcebuild/envsetup.sh的目的是设置环境变量和提供一些编译所需的函数和工具。具体来说,这个脚本的作用包括:设置环境变量:envsetup.sh脚本会设置一些关键的环境变量,例如PATH和ANDROID_BUILD_TOP。ANDROID_BUILD_TOP是指向安卓源码根目录的路......
  • setpci 使用方法
    以设置PASIDcapabilityenable为例,假设通过lspci-s0d:00.0-vvvv显示如下..........在键入命令lspci-s0d:00.0-xxxx显示如下...........根据协议如下:那么可以对照如下因此,我们可以这样设置:setpci-s2d:00.020a.b=07设置完成后,lspci看一下结果,如下:就成功了......
  • 切换颜色和符号 scattermapbox -plotly dash
    我试图包含两个单独的开关来改变散点图框的颜色和符号。颜色切换工作正常,而符号切换工作时,它会丢弃颜色。我希望能够同时打开符号和颜色。可以吗?注意:需要是scattermapboximportdashfromdashimportDash,dcc,html,Input,Outputimportplotly.expressasp......
  • 如何在QTextEdit中实现类似于PyQt6中QLineEdit的.setMaxLength的.setMaxLength?
    我正在寻找一种方法来实现上述内容。我创建了一个自定义QTextEdit,它在下面的QLabel中显示字符数和允许的字符数。当我创建此类的实例时,一切都按预期工作,除了我尝试重新创建的.setMaxLength函数。下面是我的自定义QTextEdit类classCustomTextEdit(QWidget):def__in......
  • Css为例 Hugo博客框架编译时将Assets中未实际使用的文件引入Public
    今日作Hugo博客开发的过程中,想使用main.css作为其他css的入口,即项目仅引用main.css,子样式模块在main.css中引入。编译后发现public中仅有main.css,没有其他的css文件导致样式无法正常使用。遂寻找解决办法:在项目仅实际引用main.css的情况下,将其他css文件导入public。解决办法为引......
  • mapbox大数据展示
    Mapbox是一个强大的地图引擎,可以用来展示大数据。以下是使用Mapbox展示大数据的基本步骤和示例代码:注册Mapbox账号并获取访问令牌(AccessToken)。在HTML中引入MapboxGLJS库。初始化地图并设置样式。使用GeoJSON或者其他格式加载数据。根据加载的数据添......
  • mapper文件 和bean
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.hspedu.springboot.my......
  • CS50x2023 Psets9“财务”。获取股票报价时的“查找”功能问题
    我在此任务中的问题是从查找函数获取任何其他“无”输出。经过几天的战斗,我实现了yt教程中的代码,精确地为1到1,但它仍然给出相同的结果-查找“无”。我不知道我可以在哪里寻找这种行为的根源。下面我附上了我的“quote.html”和@quote应用程序Python代码,用于在本练习中获取......