C++STL常用数据结构

目录

导入

一、栈stack / 队列queue / 优先级队列priority_queue

1、数据结构简介

(1)栈

(2)队列

2、定义

3、函数

二、映射map

结语

导入

想必大家在写程序的过程中都遇到过一些麻烦吧?比如深搜和广搜要用到栈和队列,于是......

class Stack{
private:
    int nElems, top;
    int * p;
public:
    Stack(int n){...}
    Stack(){...}
    void push(int a){...}
    void pop(){...}
    void printStack(){...}
    void size(){...}
};

class Queue{
    ......
};

但是,实际上,C++的STL标准库就为我们提供了很多全类型通用的诸如栈、队列、集合等常用数据结构。接下来,小编将一一介绍这些。

一、栈stack / 队列queue / 优先级队列priority_queue

1、数据结构简介

众所周知,栈、队列、优先级队列都是比较常用的数据结构。接下来,小编将先介绍一下这些结构的用法(老手可以跳过了)

(1)栈

栈(stack)是一种先进后出的数据结构。什么叫先进后出呢?看图。

C++STL常用数据结构_第1张图片 图1C++STL常用数据结构_第2张图片

如图1,这是一个容量为5的空栈,栈顶在最下边。在图2中,我们往栈顶插入了一个元素14,栈顶上移一个单位;

C++STL常用数据结构_第3张图片 图3C++STL常用数据结构_第4张图片 图4

 

然后,我们又依次插入了45和11两个元素(图3)。

最后,从栈顶依次弹出三个元素,得到出栈序列114514( bushi 

(2)队列

先进先出的序列,没什么好说的

2、定义

通常,STL标准库的数据结构定义都是这样的:

数据结构类型<存储类型>结构名

例如,要定义一个名为s1,存储整型的栈,则代码为:

#include 
stack  s1;

 注意:在使用STL库函数时,一定要先插入头文件,如栈的头文件为stack,队列为queue等,当然你也可以直接用万能头文件bits/stdc++.h,这样就当我没说好了qwq

3、函数

用途:往结构内插入数据,例:

stack  s1;
s1.push(233);

当然,这里的stack也可以换成queue或priority_queue等,后文不再赘述

其余常用函数用法如下:

stack  s1;
queue  q1;
s1.pop() 或 q1.pop()           //从一定位置(栈顶、队头)取出元素
s1.top() 或 q1.front()         //获取栈顶或队头元素
s1.size()或 q1.size()          //获取结构内元素数量

二、映射map

写程序的过程中,我们经常需要保存一个string类型的用户名和用户的数据,于是我们的代码通常会这么写:

#define MaxN 233
struct Person{
    string name;
    int age;
}m[MaxN];
int find(string s){
    for(int i = 0; i < MaxN; i++)
        if(m[i].name == s) return i;
    return -1;
}

为了直到名字s对应的下标或数据,我们通常会写一个find函数,这就让我们的代码平添了五行,非常不舒服 (bushi) 那有没有一种可能,我们的代码可以写成这样呢?

m["233"] = 0;
cout << m["233"];

 这里,我们使用字符串作为下标,用中括号访问一个整形数据,还做了修改和输出。

若是在平常,这种代码肯定是不存在的(除非你有这个闲工夫心思去重载运算符)

但,是!今天,时代变了!我们可以写出下面几行代码:

#include 
map  m;
m["233"] = 0;

这里,我们导入了头文件map,然后我们用一种奇怪的方式访问到了以字符串作为下标的数据。

这就是用到了STL的一种神奇数据结构——map映射。

具体定义时,我们可以这么写:

map <下标类型, 数据类型> 结构名

与前面几个数据结构的定义不同,这次的尖括号里有两个参数,分别代表访问的下标类型和需要存储的数据类型(别问我为什么参数名那么通俗,问就是我取的名)

结语

制作不易,点个赞呗~

你可能感兴趣的:(C++,编程语言,c++,数据结构,java)