首页 > 其他分享 >第一节 线性数据结构 STL

第一节 线性数据结构 STL

时间:2023-07-10 14:44:05浏览次数:26  
标签:map end cout 容器 STL 第一节 ++ mp 数据结构

vector 容器

迭代器

vector<int> v{1, 0, 0, 8, 6};
for(vector<int>::interator it = v.begin(); it != v.end(); it ++)
  cout << *it << " ";

函数

push_back(x);  // 添加元素
pop_back();    // 删除尾元素
size();        // 查询 vector 长度
insert(it, x); // 插入元素
erase();       // 删除vector容器中的一个或一段元素
clear();       // 清空容器

总结

做题时能用数组就尽量用数组, vector 的时间复杂度比数组慢很多。

set 集合

介绍

\(set\)(集合)是 \(C++ STL\) 中的一种关联式容器, 它内部使用红黑树(一种自平衡二叉搜索树)去实现元素的有序存储。

访问

只能通过迭代器访问 例:

set<int> s{1, 0, 0, 8, 6};
for(set<int>::interator it = s.begin(); it != s.end(); it ++)
  cout << *it << " ";

但可以利用 \(C++ 11\) 继续简化

for(auto it = s.begin(); it != s.end(); it ++)
  cout << *it << " ";

for(auto it : s)
  cout << it << " ";

函数

insert(x);             // 时间复杂度 O(log_n)
find(x);               // 返回 set 中对应值的迭代器, 否则返回 end(), 时间复杂度 O(log_n)
erase(first, second);  // 删除容器中的元素
clear();               // 清空容器
lower_bound(x);        // 找到首个大于等于给定元素的迭代器, 不存在返回 end()
upper_bound(x);        // 找到首个大于给定元素的迭代器, 不存在返回 end()
size();                // 查询 set 元素个数, 时间复杂度 O(1)
empty();               // 容器是否为空
count(x);              // 查找 x 的个数, 返回 0 / 1

拓展

不去重但排序的容器 : \(multiset\)

map 容器

为什么要用 map

问 : 我要统计一堆数中一个数的个数, 用什么!!
答 : 用 桶数组!!

再问 : 我要统计一堆字符串中一个字符串的个数, 用什么!!
答 : \(map\)!!

现在懂了为什么要用 \(map\) 了吗?

特性

1. 通过键访问

map<string, int> mp;
mp["mp"] ++;
mp["10086"] ++;
mp["abc"] ++;
mp["10086"] ++;
cout << mp["10086"] << ' ' << mp["abc"];

这里程序结果输出 2 1, 可以看出 \(map\) 的键具有唯一性。

2. 通过迭代器访问

注: map 会以键的大小自动排序

map<char, int> mp;
mp['a'] ++;
mp['b'] = 10086;
mp['c'] = 114514;
for(map<char, int>::interator it = mp.begin(); it != mp.end(); it ++)
  cout << it->first << " " << it->second << endl;

这里 也可以写成 :

for(auto it = mp.begin(); it != mp.end(); it ++)
  cout << it->first << " " << it->second << endl;

for(auto it : mp)
  cout << it.first << " " << it.second << endl;

标签:map,end,cout,容器,STL,第一节,++,mp,数据结构
From: https://www.cnblogs.com/So-noSlack/p/17541065.html

相关文章

  • STL常用函数
    STL常用函数STL简介STL是StandardTemplateLibrary的简称,中文名称为标准模板库,从根本上讲,就是各种STL容器的集合,容器可以理解为能够实现很多功能的系统的函数。常见的容器有vector,stack,queue,map,set等。迭代器迭代器(iterators)是用来访问容器中的元素,类似于指针......
  • 【技术积累】数据结构中栈与队列及其相关算法【一】
    什么是栈栈是一种特殊的数据结构,它的各个元素按照一定的次序排列,且只能在表的一端(称为栈顶)进行添加和删除数据,这种数据结构遵循后进先出(LIFO)的原则。栈可以简单地理解为一种容器,它在使用时非常方便,因为只需在顶部压入(push)或弹出(pop)元素即可。栈可以直接使用数组或链表等数据结构......
  • 堆 STL
    https://blog.csdn.net/qq_41687938/article/details/1192570461#include<bits/stdc++.h>2#include<queue>3usingnamespacestd;4intn;5intx;6intop;7intmain()8{9priority_queue<int,vector<int>,greater<......
  • C语言:数据结构之单链表(二)
    上一篇随笔谈了谈单链表是什么东西,然后进行了初始化,这篇随笔就开始对其进行操作了,首先是增,删,改,查的增。增,顾名思义就是要增加新的元素,单链表是链式的,那就要考虑怎么去加新元素,有三种,从头部添加,从尾部添加,从中间添加。先说说从尾部添加,这个比较好理解,直接在尾部放一个结点......
  • 数据结构day1
    数据结构的一些基本概念:1、数据。2、数据项、3、数据元素、4、数据结构5、算法数据的逻辑结构:1、线型结构2、树型结构3、图型结构数据的存储结构:1、顺序结构2、链式结构链式表:1、带头节点的链表2、不带头节点的链表功能受限的表结构:栈:************实现一个函数判......
  • 数据结构与算法(一)
    需要点Java编程基础常见的数据结构栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。队列(Queue):队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。数组(Array):数组是一种聚合数据......
  • C/C++数据结构与算法课程设计[2023-07-06]
    C/C++数据结构与算法课程设计[2023-07-06]数据结构与算法课程设计一、课程设计的目的、要求和任务 本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写等基本方法。1.课程的目的(1)使学生进一步理解和掌握课堂上所学......
  • 第一节 Java基础语法
    注意:​ 用记事本打开本文档,格式较差。​ 可安装typora软件后再次打开。​ 安装包位于:day01\资料\其他软件\阅读笔记的软件\typora-setup-x64.exeday01-Java基础语法1.人机交互1.1什么是cmd?就是在windows操作系统中,利用命令行的方式去操作计算机。我们可以利用cmd命令......
  • 数据结构
    绪论基本概念数据数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号集合,数据时计算机加工的原料。数据元素数据项数据元素:数据的基本单位数据项:数据元素由多个数据项组成数据结构数据对象结构:各元素之间的关系数据......
  • 数据结构(算法)【7月6日】
    一、算法的基本概念:1、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。2、算法的特性:(1)有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成;【算法是有穷的,程序是无穷的】(2)确定性:算法中每条指令必须有确切的含义,......