📜  哪些C ++库可用于竞争性编程?

📅  最后修改于: 2021-06-26 17:39:05             🧑  作者: Mango

C++是竞争性编程中最推荐的语言之一(请参阅我们的上一篇文章,了解其原因)

C++ STL包含许多可用于不同目的的容器。在本文中,我们将从竞争性编程和面试准备的角度重点介绍最重要的容器。

vector :(#include )动态大小的数组,它允许插入和删除而不关心数组的大小。它还具有纯数组的优点,例如随机访问和缓存友好性。 C++向量支持许多其他操作,例如:ease(),push_front(),insert()等。

队列:(#include )在我们希望具有FIFO项目顺序的情况下很有用。问题示例包括:生成具有给定数字的数字,流中的第一个非重复字符,树及其变化的层级遍历,图形及其变化的BFS。请参阅队列练习问题以获取更多练习。

stack :(#include )用于我们希望获得LIFO订单的情况。示例问题包括平衡括号,股票跨度问题,直方图中的下一个更大的元素和最大的面积。请参阅堆栈练习问题以获取更多练习。

set and map :(#include 和#include )这两个都实现自平衡二进制搜索树(特别是Red Black Tree)。在我们希望维护具有中等(比数组更好,比不及哈希更好)搜索,插入和删除查询时间的排序项目的情况下很有用。示例问题包括:左侧的最近最大或相同的值,为数组中的每个元素查找最接近的值等。当我们仅希望存储键时使用set,而在希望存储键值对时使用map。

unordered_setunordered_map :(#include 和#include )这两种方法都通过链接实现散列。当我们希望快速搜索,插入和删除(所有三个操作均为O(1))时很有用。这是该行业中最常用的数据结构之一,也是学术界最低估的数据结构。存在许多流行的问题,计数不同的元素,数组项的频率,具有0和的子数组以及两个未排序数组的并集和交集。请参阅散列练习问题以获取更多实践信息

priority_queue :(#include )默认实现最大堆。我们也可以创建一个Min Heap。只要我们希望有效地找到最小或最大元素,就使用它。它用于实现流行的算法,例如Prim算法,Dijkstra最短路径,霍夫曼编码,K个最大元素,可购买和合并K个排序数组的最大玩具,流的中位数。请参阅堆练习问题以获取更多练习。

deque (#include Dequeue支持在O(1)时间两端插入和删除。由于它是使用数组实现的,因此它还允许随机访问。我们可以使用dequeue来实现Queue和Stack两者。双端队列访问所有的汽油泵,以及所有大小为k的子数组的最大值。

在本文的下一部分中,我们将介绍更重要的C++库。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”