首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ STL精通之旅:向量、集合与映射等容器详解

STL STL 作为一个封装良好,性能合格 C++ 标准库,在算法竞赛运用极其常见。...C++ 标准模板库 (STL, Standard Template Library):包含一些常用数据结构与算法模板 C++ 软件库。...示例: 算法(Algorithms):STL算法是一组容器进行操作函数,它们独立于任何特定数据结构,可以用于执行各种任务,如搜索、排序、复制和修改容器元素。...集合三要素 解释 set multiset unordered_set 确定性 一个元素要么在集合,要么不在 ✔ ✔ ✔ 互异性 一个元素仅可以在集合中出现一次 ✔ ❌(任意次) ✔ 无序性 集合元素是没有顺序...代码演示 运行结果 希望你有帮助!加油! 若您认为本文内容有益,请不吝赐予赞同订阅,以便持续接收有价值信息。衷心感谢您关注和支持!

13700

C++ 序列式容器总结

STL 概述 C++ STL 是一套功能强大 C++ 模板类,提供了通用模板类和函数,这些模板类和函数可以实现多种流行和常用算法,关于 STL 呢,下面通过一个系统框图来其进行一个总结: image...算法:STL 通过函数模板提供了很多作用于容器通用算法,例如查找、插入、删除、排序等,这些算法均需要引入头文件,所有的 STL算法都作用在由迭代器所标识出来区间,可以分为两类: 质变算法:运算过程中会更改区间内...迭代器所指向内容,如分割,删除 非质变算法:运算过程不会改变区间内迭代器所指向内容,如匹配,计数等算法 迭代器:迭代器提供一个容器对象访问方法,并且定义了容器对象范围。...事实C++指针也是一种迭代器。 仿函数:仿函数在 C++ 标准采用名称是函数对象。...:返回容器第一个元素双向迭代器,返回指向容器中最后一个元素所在位置下一个位置双向迭代器。

92420
您找到你想要的搜索结果了吗?
是的
没有找到

C++ STL简介

C++ STL 简介 前言 STL,英文全称 standard template library,中文可译为 标准模板库或者泛型库,其包含有大量模板类和模板函数,是 C++ 提供一个基础模板集合..., 第一个元素 second, 第二个元素 支持比较运算, first 为第一关键字, second 为第二关键字(字典序) string string 是 C++ 标准库一个重要部分,主要用于字符串处理...# 弹出队头元素 priority_queue priority_queue, 优先队列,元素按照一定规则排列有序,在优先队列元素被赋予优先级。...# 删除键值 lower_bound(key) # 返回指向第一个大于或等于key元素迭代器 upper_bound(key) # 返回指向第一个大于key...元素迭代器 [] # 重载 [] 运算符 参考 STL 教程:C++ STL 快速入门 C++ STL 常用容器 API 总结

44810

C++STL3)容器适配器(1) stack,queue and priority_queue

C++STL3)容器适配器 容器适配器是一个封装了序列容器模板,它在一般序列容器基础提供了一些不同功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同功能。...图 1 展示了一个理论 stack 容器及其一些基本操作。只能访问 stack 顶部元素;只有在移除 stack 顶部元素后,才能访问下方元素。 ? stack 容器适配器模板有两个参数。...比较运算通过字典方式来比较底层容器相应元素。字典比较是一种用来字典单词进行排序方式。依次比较对应元素值,直到遇到两个不相等元素第一个不匹配元素会作为字典比较结果。...这是通过调用底层容器具有右值引用参数成员函数 push_back() 来完成。 pop():删除 queue 第一个元素。 size():返回 queue 中元素个数。...fonction 定义了 greater,用来作为模板最后一个参数元素排序,最小元素会排在队列前面。当然,如果指定模板最巵一个参数,就必须提供另外两个模板类型参数。 ?

64630

C++基础 STL简介

对于其它不在末尾删除和插入操作,效率更低。比起lists和forward_lists统一迭代器和引用更好。...因此,如果要修改 multiset 容器某个元素值,**正确做法是先删除元素,再插入新元素**。 set set 和 multiset 类似,差别在于**set不能有重复元素** 。...multimap 元素都是pair 模板对象。元素 first 成员变量也叫“关键字”,second 成员变量也叫“值”。multimap 容器元素是按关键字从小到大排序。...容器适配器(stack、queue、priority_queueSTL容器适配器有 stack、queue、priority_queue 三种。...top:返回顶部 stack 而言)或队头( queue、priority_queue 而言)元素引用。 pop:删除一个元素

65320

STL小结

容器 特性 所在头文件 向量vector 可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,任意项插入和删除就有的时间复杂度与到末尾距离成正比,尤其向量头添加和删除代价是惊人... 双端队列deque 基本与向量相同,唯一不同是,其在序列头部插入和删除操作也具有常量时间复杂度 表list 任意元素访问与两端距离成正比,但对某个位置插入和删除一个项花费为常数时间... 堆栈stack 堆栈是项有限序列,满足序列中被删除、检索和修改项只能是最近插入序列项。...STL算法也是非常优秀,它们大部分都是类属,基本都用到了C++模板来实现,这样,很多相似的函数就不用自己写了,只要用函数模板就可以了。...STL通用算法search()用来搜索一个容器,但是是搜索一个元素串,不象find()和find_if() 只搜索单个元素。 search算法在一个序列找另一个序列第一次出现位置。

81910

C++和JavaSTL库入门

C++和JavaSTL库入门 STL简介 为什么使用STL STL基本概念 STL使用前初始化 C++STL基本容器详解 Java里STL基本容器详解 参考会长大佬 https...–二叉搜索树-红黑树 set s; s.insert(1); // 插入到集合 s.erase(1); // 从集合删除 s.erase(s.begin()); // 从集合删除...、没有重复值,如果出现重复值会不断被覆盖 3、几乎所有操作复杂度均为 O(logN) 4、不可以修改节点值 5、修改操作只能进行插入和删除两个操作 set通常作用:保证唯一性,保证数列有序 map...: 1.需要头文件#include; 2.map字典(键集合)——二叉搜索树——红黑树 map m; m.insert(make_pair('a', 1)); //...; 2、key不能重复,不能修改,只能删除和添加; 3、允许value重复,可以对value进行修改; 4、map是按照key进行排序; 5、key和value一定是成对出现; 6、map

1.2K50

C++航海王:追寻罗杰编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

优先队列是一种容器适配器,根据严格弱排序标准,它第一个元素是它所包含元素中最大。 2. 类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素)。 3....容器应该可以通过随机访问迭代器访问,支持以下操作: empty(): 检测容器是否为空 size(): 返回容器中有效元素个数 front(): 返回容器第一个元素引用 push_back():...1.2 -> priority_queue使用 优先队列默认使用vector作为其底层存储数据容器,在vector又使用了堆算法将vector中元素构造成堆结构,因此priority_queue...2.2 -> STL标准库stack和queue底层结构 虽然stack和queue也可以存放元素,但在STL并没有将其划分在容器行列,而是将其称为容器适配器,这是因为stack和queue只是其他容器接口进行了包装...但是STLstack和queue默认选择deque作为其底层容器,主要是因为: stack和queue不需要遍历(因此stack和queue没有迭代器),只需要在固定一端或两端进行操作。

9110

C++初阶:容器适配器priority_queue常用接口详解及模拟实现、仿函数介绍

元素从特定容器“尾部”弹出,其称为优先队列顶部。 底层容器可以是任何标准容器类模板,也可以是其他特定设计容器类。...容器应该可以通过随机访问迭代器访问,支持以下操作: empty():检测容器是否为空 size():返回容器中有效元素个数 front():返回容器第一个元素引用 push_back():在容器尾部插入元素...在C++,优先队列通常使用堆(heap)数据结构来实现,这使得它能够在==O( logn )时间复杂度内元素进行插入和删除操作,并能够O(1)时间复杂度获取队列最大(或最小)==元素。...底层实现: 在C++,优先队列通常使用vector或deque作为底层容器,通过堆算法来维护元素顺序。...在C++,函数对象可以形式实现(其实是个类),重载operator()运算符,从而可以像函数一样被调用。

14210

c++】stack和queue使用 && stack和queue模拟实现

kw=stack stack是一种容器适配器,专门用在具有后进先出操作上下文环境,其删除只能从容器一端进行元素插入与提取操作 stack是作为容器适配器被实现,容器适配器即是特定类封装作为其底层容器.../ 优先队列是一种容器适配器,根据严格弱排序标准,它第一个元素总是它所包含元素中最大 此上下文类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素) 优先队列被实现为容器适配器...元素从特定容器“尾部”弹出,其称为优先队列顶部 底层容器可以是任何标准容器类模板,也可以是其他特定设计容器类。...容器应该可以通过随机访问迭代器访问,支持以下操作: empty():检测容器是否为空 size():返回容器中有效元素个数 front():返回容器第一个元素引用 push_back():...STL标准库stack和queue底层结构 虽然stack和queue也可以存放元素,但在STL并没有将其划分在容器行列,而是将其称为容器适配器,这是因为stack和队列只是其他容器接口进行了包装

8410

一文带你掌握 优先级队列

一、优先级队列(priority_queue)介绍 在C++priority_queue是一种标准模板库(STL)容器,通常用于实现优先队列数据结构。...它可以在数据结构自动维护元素顺序,而不需要手动排序。 因为priority_queue类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素)。...底层容器可以是任何标准容器类模板,也可以是其他特定设计容器类。容器应该可以通过随机访问迭代器访问,支持以下操作 push(): 插入元素到队列。 top(): 获取队列中最高优先级元素。...empty(): 检查队列是否为空 priority_queue特点: 它是一个容器类模板,可以存储任何可比较类型。 该容器元素按照一定比较规则(默认为大根堆)排列,允许用户自定义规则。...pop() 将堆顶数据删除 2.1 利用优先级队列排序(降序) 如果C语言阶段学过堆友友们堆应该很了解了.

20711

【stack】【queue】【priority_queue】【deque】详解

.优先级队列概念 文档介绍:priority_queue - C++ Reference 优先队列是一种容器适配器,根据严格弱排序标准,它第一个元素总是它所包含元素中最大。...此上下文类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素)。...容器应该可以通过随机访问迭代器访问,支持以下操作: empty(): 检测容器是否为空 size(): 返回容器中有效元素个数 front(): 返回容器第一个元素引用 push_back()...STL标准库stack和queue底层结构 虽然stack和queue也可以存放元素,但在STL并没有将其划分在容器行列,而是将其称为容器适配器,这是因为stack和queue只是其他容器接口进行了包装...也就是说 priority_queue 第一个元素是最大。 ​ 那如果我们需要是个小堆呢?那该怎么办?所以这个时候我们就得传仿函数给模板当参数,让模板来控制我们想要

77130

【小码匠自习室】CSP-JS复赛准备:STL复习(二)

C++ アルゴリズム実装に使える 25 の STL 機能【後編】,针对日文进行了翻译 标准库 标准库 说明 vector 动态数组 stack 栈 queue 队列 priority_queue 优先队列...保证push()和pop()都是O(log(n)) 与普通队列区别 队列每个元素都与某个优先级相关联 具有最高优先级元素将被首先删除 如果存在多个具有相同优先级元素,则按照该元素在队列顺序存储...常用方法 程序 说明 a.push(x) 添加元素x到优先级队列 a.emplace(x) 优先队列顶部插入一个新元素 a.pop() 删除a中最小元素(默认) a.top() 返回a中最小元素(... operator< 为比较方式,所以在只使用第一个参数时,优先队列默认是一个最大堆,每次输出堆顶元素是此时堆最大元素。...中会删除所有元素x a.erase(y) 从集合a删除迭代器y元素xmultiset时候,只有1个元素删除 a.lower_bound(x) 返回集合a,大于等于a最小元素迭代器 a.clear

80620

【Example】C++ 标准库常用容器全面概述

序列允许查找、插入和移除任意元素方式表示,包含与序列元素数量无关多个操作(常量时间),至少在所有存储桶长度大致相等时如此。...基于红黑树 map 会根据键大小自动升序排序,基于哈希表则无序。 map 可以根据键映射直接修改元素值。但是,键却是常量无法修改,只能删除已有的键值再添加新。...equal_range 返回一迭代器。第一个迭代器指向Map其键大于指定键第一个元素。第二个迭代器指向Map其键等于或大于指定键第一个元素。...序列允许查找、插入和移除任意元素方式表示,包含与序列元素数量无关多个操作(常量时间),至少在所有存储桶长度大致相等时如此。...priority_queue元素进行排序,以便最大元素始终位于顶部位置。 它支持元素插入以及顶部元素检查和删除

3.2K30

C++系列笔记(十一)

删除元素 map和multimap提供了成员函数erase(),该函数删除容器元素。...调用erase函数时将键作为参数,这将删除包含指定键所有键-值: mapObject.erase(key); erase函数另一种版本接受迭代器作为参数,删除迭代器指向元素: mapObject.erase...键-值容器std::unordered_map 要使用这个模板类,需要包含头文件#include unordered_map平均插入和删除时间是固定,查找元素时间也是固定...这种谓词可用于std::sort()等排序算法,这些算法容器两个值调用二元谓词,确定将哪个放在前面。...它是一个泛型类,允许在顶部插入和删除元素,而不允许访问中间元素。从这种角度看,std::stack行为很像一叠盘子。

1.3K20

stack和queue及优先级队列和适配器(包括deque)介绍

pop一个元素 priority_queue priority_queue介绍 优先队列是一种容器适配器,根据严格弱排序标准,它第一个元素总是它所包含元素中最大。...此上下文类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素)。...容器应该可以通过随机访问迭代器访问,支持以下操作: empty():检测容器是否为空 size():返回容器中有效元素个数 front():返回容器第一个元素引用 push_back():在容器尾部插入元素...就比如说我们自己充电头用到欧洲插座我们就需要用到有一个适配插头来当作接口,这就是适配器 STL标准库stack和queue底层结构 虽然stack和queue也可以存放元素,但在STL并没有将其划分在容器行列...,而是将其称为容器适配器,这是因为stack和队列只是其他容器接口进行了包装,STLstack和queue默认使用deque,在官方网站可以查询到标准库默认适配器: 可以看到他们默认适配器均是

9110

C++初阶-stackqueuepriority_queue使用和模拟

模拟实现 七、queue模拟实现 八、priority_queue模拟实现 零、前言 本章主要讲解学习C++容器stack(栈),queue(队列),priority_queue(优先级队列...介绍和使用 1、priority_queue介绍 优先队列是一种容器适配器,根据严格弱排序标准,它第一个元素总是它所包含元素中最大(默认优先级队列) 优先级队列类似于堆,在堆可以随时插入元素...元素从特定容器“尾部”弹出,其称为优先队列顶部 底层容器可以是任何标准容器类模板,也可以是其他特定设计容器类。...容器应该可以通过随机访问迭代器访问,支持以下操作: ​ empty():检测容器是否为空 ​ size():返回容器中有效元素个数 ​ front():返回容器第一个元素引用 ​ push_back...priority_queue底层结构: 虽然stack和queue也可以存放元素,但在STL并没有将其划分在容器行列,而是将其称容器适配器 因为stack和队列只是其他容器接口进行了包装

28720

C++修炼之路】13. priority_queue及仿函数

,根据严格弱排序标准,它第一个元素总是它所包含元素中最大。...此上下文类似于堆,在堆可以随时插入元素,并且只能检索最大堆元素(优先队列位于顶部元素) 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定成员函数来访问其元素...元素从特定容器“尾部”弹出,其称为优先队列顶部。 底层容器可以是任何标准容器类模板,也可以是其他特定设计容器类。...容器应该可以通过随机访问迭代器访问,支持以下操作: empty():检测容器是否为空 size():返回容器中有效元素个数 front():返回容器第一个元素引用 push_back():...原因在于函数指针毕竟不能满足STL抽象性要求,也不能满足软件积木要求---->函数指针无法和STL其他组件搭配,产生更灵活变化。

44400

STL库基础学习

4)set和map 3.几种STL 时间复杂度比较 ---- 1.什么是STL库 ◦ STL 又称为标准模板库,是一套功能强大 C++ 模板类,提供了通用模板类和函数,这些模板类和函数可以实现多种流行和常用算法和数据结构...可以通过元素在序列位置访问对应元素。 2.动态数组 ◦ 支持序列任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加 / 删除元素操作。...it): 删除向量迭代器指向元素 ◦ iterator erase(iterator first,iterator last): 删除向量 [ first,last ) 中元素...,具体可以在百度或谷歌搜索 C++ list 用法 (3)queue和stack ◦ queue 功能与我们在数据结构当中所学队列相似,是一个只能从尾部插入,顶部弹出模板 ◦ stack...功能与我们在数据结构中所学栈相似,是一个只能从顶部插入和弹出模板. (4)set和map ◦ set 和 map 没有顺序概念,因为在底层实现是红黑树,而非顺序结构 ◦ set

82740
领券