C++ 部分STL
- map
map可以理解为一个数组(但实质上并不是,只是方便理解),我们一般的数组不管定义成什么类型他的下标都是整型(int),map和这些数组的区别是他的下标可以是其他类型,由自己定义。map的创建、插值和访问示例如下:
#include"cstdio"
#include"string"
#include"map"
using namespace std;
//尖括号里两个数据类型,第一个可以理解为数组下标的类型,第二个就是数组的数据类型;
map<string,int>mp;
int main(){
mp["one"]=;
mp["two"]=;
printf("%d\n",mp["one"]+mp["two"]);
//结果显然是3;
printf("%d\n",mp["three"]);
//结果是0;
//由于未插入"three"的值,所以"three"的值默认为0;这里要注意是在查询"three"前发现mp中没有"three"而给"three"插入了0的值
//为什么这么说呢?因为在执行完上面的代码之后,mp里面有三条记录,也就是说"three"对应的是0,而"four"则是不存在
return ;
}
NOTE:map这个“数组”会把记录按照下标排序。比如我先插入了mp["b"];再插入mp["a"],mp["a"]会到mp["b"]的前面去;在下面的遍历代码中可以体现;
map的遍历代码如下:
#include"cstdio"
#include"string"
#include"iostream"
#include"map"
using namespace std;
map<string,int>mp;
int main(){
mp["one"]=;
mp["two"]=;
mp["three"]=;
mp["four"]=;
for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++)
cout<< it->first << ":" << it->second <<" ";
/*
结果是:four:4 one:1 three:3 two:2
由此可以看出不是按输入顺序的
*/
cout<<endl;
//C++11版本之后推出了一种更方便的遍历方式
//map中每一条记录都是一个pair,关于pair在这里不展开,可以去百度
for(auto it:mp)
cout<< it.first << ":" << it.second <<" ";
cout<<endl;
return ;
}
还有一些关于map的方法如下:
#include"cstdio"
#include"string"
#include"map"
using namespace std;
map<string,int>mp;
int main(){
mp["one"]=;
mp["two"]=;
mp["three"]=;
mp["four"]=;
mp.insert(make_pair("one",));
//和mp["one"]=1;的作用差不多,区别在于如果mp中的"one"如果已经有值,mp["one"]=1会覆盖掉原有值,而上面这句会插入失败;
printf("%d\n",mp.size());
//mp.size()返回mp中有几条记录,这里插入了四条,所以返回为4;
mp.erase(mp.begin());
//mp.begin()的作用是返回mp中的第一条记录的迭代器,这里的迭代器类似地址,就像指针;
//mp.erase()的作用是删除括号内的记录;
//mp.erase()还有其他写法如:mp.erase("three");删除"three"这条记录;
//mp.erase(mp.begin(),mp.end());mp.end()返回mp里的最后一条记录的后一个迭代器,mp.erase(mp.begin(),mp.end())相当于从头删到尾,相当于mp.clear();
printf("%d\n",mp.size());
//删掉之后还剩3条记录
mp.clear();
//用于清空mp;
printf("%d\n",mp.size());
//可以验证一下,mp已被清空,所以结果为0;
return ;
}
- set
set是一个集合,和map内部都是用红黑树写的,所以比较像,只是set只有键,没有值。一开始我不太会写set的时候用map来代替,就把map的值的数据类型设置为bool。因为bool只有true和false,可以用true表示已存入这个键,用false表示没有这个键。另外,它不能用下标查找和插入。
#include "cstdio"
#include "set"
using namespace std;
// 定义
set<int> st;
int main() {
// 插入
st.insert();
st.insert();
st.insert();
st.insert();
// 查询是否存在某个键
if (st.count()) {
puts("Yes");
} else {
puts("No");
}
if (st.count()) {
puts("Yes");
} else {
puts("No");
}
if (st.count()) {
puts("Yes");
} else {
puts("No");
}
// 之前往st中插入了3,6,1,没有7;所以结果是Yes Yes No
// st的遍历
for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
// 这里的it是一个类似指针的东西,所以要加星号
printf("%d ", *it);
}
// 和mp差不多,st也可以自动排序,而且没有重复值,那种C++ 11版本的遍历方式也是可以的;
// 关于clear size erase 等方法和map差不多,就不写了
return ;
}
- queue
这个容器只能访问最早放进来的东西,也就是队首,只有将队首删掉才能访问第二个元素,常用于BFS算法;
#include "cstdio"
#include "queue"
using namespace std;
queue<int> q;
int main() {
// 依次放入4,2,6
q.push();
q.push();
q.push();
// front 是访问队首的方法,q.front()返回最早放入的也就是4
printf("%d\n", q.front());
// 这个pop用于删除队首,这个时候2就成了队首
q.pop();
printf("%d\n", q.front());
// 求元素个数,一开始放入三个数,4被删除后还剩两个
printf("%d\n", q.size());
// queue的遍历只能通过循环访问并删除
while (!q.empty()) {
printf("%d\n", q.front());
q.pop();
}
return ;
}
- stack
和queue相似,stack只能访问队尾
#include "cstdio"
#include "stack"
using namespace std;
stack<int> sk;
int main() {
// 依次放入4,2,6
sk.push();
sk.push();
sk.push();
// top 是访问队尾的方法,sk.top()返回最晚放入的也就是6
printf("%d\n", sk.top());
// 这个pop用于删除队尾,这个时候2就成了队尾
sk.pop();
printf("%d\n", sk.top());
// 求元素个数,一开始放入三个数,6被删除后还剩两个
printf("%d\n", sk.size());
// stack的遍历
while (!sk.empty()) {
printf("%d\n", sk.top());
sk.pop();
}
return ;
}
C++ 部分STL的更多相关文章
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++ STL简述
前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL的使用
Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
随机推荐
- 本地搭建3节点kubernetes
kubernetes本地搭建版本选择 CentOS Linux release 7.7.1908 kubernetesVersion: v1.17.0 weave-kube:2.6.0 ceph/ce ...
- 干货分享,FPGA硬件系统的设计技巧
PGA的硬件设计不同于DSP和ARM系统,比较灵活和自由.只要设计好专用管脚的电路,通用I/O的连接可以自己定义.因此,FPGA的电路设计中会有一些特殊的技巧可以参考. 1. FPGA管脚兼容性设计 ...
- JavaScript sort()方法总结
sort() 方法用于对数组的元素进行排序. 语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函数. 注:如果调用该方法时没有使用参数,将按字母顺序对 ...
- keras中的一些小tips(一)
写这篇博客的原因主要是为了总结下在深度学习中我们常会遇到的一些问题,以及不知道如何解决,我准备把这个部分作为一个系列,为了让大家少走一些坑,对于本博客有什么错误,欢迎大家指出,下面切入正题吧. 1. ...
- DNS和hosts
https://zhidao.baidu.com/question/571487394.html 还有ip地址和域名 域名是唯一的 ip也是唯一的 但是一个域名可以对应多个ip(就好比百度只有一个域名 ...
- python学习笔记_集合的定义和常用方法
1.认识集合 定义: s={1,2,3,4,5} s=set("hello") s=set(["steven","job","da ...
- springBoot 使用redis 和 StringRedisTemplate 常用操作
spring boot 使用 redis : 1,pom 引入 redis,貌似springboot 1.5以上的版本,引入redis必须加 <version></version&g ...
- Django学习---多人博客项目(1)
一.创建项目和应用 在Pycharm中用Django模板创建一个工程文件 创建项目 python manage.py startproject 项目名 . 创建应用 python manage.p ...
- 懒人JS
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- chromosome interaction mapping|cis- and trans-regulation|de novo|SRS|LRS|Haplotype blocks|linkage disequilibrium
Dissecting evolution and disease using comparative vertebrate genomics-The sequencing revolution s ...