首页 > 其他分享 >stl用法总结

stl用法总结

时间:2024-11-27 18:54:40浏览次数:8  
标签:总结 map 迭代 stl 元素 用法 vector key pair

vector

头文件

#include<vecotr>

声明

vector<int> a;
vector<int> b[233];
struct rec{...}; vector<rec> c;

函数调用

.size()返回vector数组的长度
.empty()若为空,则返回1,否则返回0;
.begin() / .end()返回指向第一个/最后一个元素的迭代器
.front() / .back()返回第一个/最后一个元素,等价于*a.begin()/*--a.end() a[0]/a[size-1];
.push_back(x)将x插入到vector a的尾部
.pop_back()删除vector a的最后一个元素

queue

头文件

#include<queue>

声明

queue<int> q;
struct rec{...};
queue<rec> q;
priority_queue<int> q;
priority_queue< pair<int,int> > q;

queue 循环队列 先进先出FIFO

.push()(从队头)入队
.pop()(从队头)出队
.front()队头元素
.back()队尾元素

priority_queue 优先队列,可理解成一个大根二叉堆

.push()
.pop()
.top()
实现小根堆
1、
priority_queue<int,vector<int>,greater<int> > q;
2、
struct rec{int id; double val;};
bool operator <(cosnt rec &a,const rec &b){ return a.val > b.val}

deque 双端队列

头文件

#include<deque>

函数调用

[] 随机访问,与vector类似
.begin() / .end()返回deque的头/尾迭代器
.front() / .back()队头/尾元素
.push_front() / .push_back()从队头/尾入队
.pop_front() / .pop_back()从队头/尾出队
.clear()清空队列
.size() .empty() .clear() 与vector类似,前两者的复杂度为O(1);

set 集合

头文件

#include<set>

声明

set<int> s;
struct rec{...}; set<rec> s;
multiset<double> s;
与优先队列一样,用set和multiset储存的元素必须定义“小于号”运算符

迭代器

set和multiset的迭代器被称为双向访问迭代器,
不支持随机访问,支持*号解除引用,
仅支持++和--两个与算数有关的操作

函数调用

.begin() / .end()
.insert(x)把一个元素x插入到集合中,若元素已存在,不重复插入
.erase()
设it为一个迭代器,a.erase(it);代表删除it所指向的元素,O(longn)
设x为一个元素,a.erase(x);代表删除所有等于x的元素,O(logn)
.find(x)查找等于x的元素,若不存在则返回a.end(),O(logn)

与find类似,O(logn)
.lower_bound(x)查找 >= x的元素中最小的一个,并返回指向该元素的迭代器
.upper_bound(x)查找 > x的元素中最小的一个,并返回指向该元素的迭代器
.count(x)返回等于x的元素个数,O(k+logn),k为x的个数
.size() .empty() .clear() 与vector类似,前两者的复杂度为O(1);

map

map是一个键值对key-value的映射
key和value可以是任意类型,其中key必须定义小于号运算符

头文件

#include<map>

声明

std:map<key_type,value_type> name;
eg:
map<long long,bool> vis;
map<string,int> hash;
map< pair<int,int>,vector<int> > test;

迭代器

与set一样,map的迭代器也是双向访问迭代器。
对map的迭代器解除引用后,将得到一个二元组pair<key_type,value_type>

函数调用

.size() .empty() .clear() .begin() .end()
与set类似,分别为元素个数、是否为空、清空、头迭代器、尾迭代器
.insert() / .erase()
与set类似,分别为插入和删除
insert的参数为pair<key_type,value_type>
erase的参数为key或迭代器

map<int,int> h;
h.insert(make_pair(1,2));
h.insert(make_pair(2,3));
map<int,int>::iterator it = h.begin();
pair<int,int> p = *it;
h.erase(it);
h.erase(2);
cout<<p.first<<' '<<p.second<<endl;

输出结果:1 2

.find()
h.find(x);
在map h 中查找key为x的二元组,并返回指向该二元组的迭代器,若不存在则返回h.end(),O(logn)
[]
h[key]返回key映射到的value的引用,O(logn)
[]操作符是map最吸引人的地方,我们可以方便的通过h[key]来得到key对应的value
也可以通过h[key]来修改key对应的value
需要注意,若查找的key不存在,执行h[key]后h会自动新建一个二元组(key,zero)这里zero表示广义上的“零值”,如整数0、空字符串等
建议在h[key]前先用find(key)检查key的存在性

m.insert(make_pair(1,2));
m.insert(make_pair(100,99));
cout<<m[1]<<" "<<m[100]<<endl;
m[100] = 5;
m[1] = 100;
printf("%d %d %d",m[100],m[1],m[10]);

输出:2 99
5 100 0

标签:总结,map,迭代,stl,元素,用法,vector,key,pair
From: https://www.cnblogs.com/michaele/p/18572766

相关文章

  • 【C语言的奥秘6】函数知识点总结最全
    一、什么是函数程序是由多个零件组合而成的,而函数就是这种“零件”的一个较小的单位。也可以叫子程序。在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。一般会有输入参数并有返回值,......
  • 测试面试题总结
    功能抓包APPUI自动化项目:项目流程,如何排期测试流程,项目周期项目流程中的问题介绍项目核心功能,如何设计用例熟悉或最近的项目,业务功能,和负责部分,如何进行测试业务测试除了功能上还有其他方面的逻辑测试吗项目最近发版时间开发技术评审发现了什么问题开发逻辑讲......
  • 总结一下目前使用moviepy遇到的问题
    我的moviepy版本是1.0.21·有时在movipy输出文件时报错‘NoneType’objecthasnoattribute'stdout’问题。原因是保存了一个clip后,使用了close函数将clip对象关闭。我的解决方法是:删除moviepy库文件下的audio\io子目录下AudioFileClip.py的析构方法__del__2·还有个就......
  • # 鸿蒙Flutter 常见问题总结
    鸿蒙Flutter常见问题总结dart代码中判断当前平台是否是ohosimport'package:flutter/foundation.dart';boolisOhos(){returndefaultTargetPlatform==TargetPlatform.ohos;}代码中存在Platform.isOhos会导致fluttnrun、flutterbuildhar、flutterattach失败问......
  • tree-picker和grid-picker使用问题总结
    tree-picker组件使用举例表格型:示例图点击查看代码<el-form-itemlabel="基础参数定义:":label-width="formLabelWidth"prop="fkCulateParamDef"><grid-picker:tableColumn="fkCulateParamDefColumn":modelValue="form&q......
  • 指针测试总结(一)(一维数组)
    1.取一维数组的首地址intmain(){intarr[3]={5,8,1};printf("%d\n",arr);printf("%d\n",&arr);printf("%d\n",&arr[0]);printf("%d\n",&arr+0);}输出结果:1096809108109680910810968091081......
  • 12万字 java 面经总结-面试篇
    *基础篇**1**、**Java**语言有哪些特点*1、简单易学、有丰富的类库2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)4、可靠安全5、支持多线程*2**、面向对象和面向过程的区别**面向过程*:是分析解决问题的步骤,然......
  • STL用法总结
    bitset超级好用的东西.由于内存地址是按字节即byte寻址,而非比特\(bit\),一个\(bool\)类型的变量,虽然只能表示\(0/1\),但是也占了\(1byte\)的内存。bitset就是通过固定的优化,使得一个字节的八个比特能分别储存\(8\)位的\(0/1\)。对于一个\(4\)字节的int变量,在只......
  • 11月27日总结
    今天完成看了软件设计的实验内容实验25:访问者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容[实验任务一]:打包员在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。实验24:模板方法模式[实验任务一]:数据库连接对数据库的操作......
  • 11月20日总结
    今天是周三软件设计和机器学习主要是完成实验本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解备忘录模式的动机,掌握该模式的结构;2、能够利用备忘录模式解决实际问题。     [实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系......