一. map、set、multimap、multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为: 插入: O(logN) 查看: O(logN) 删除: O(logN) 二. unordered_map、unordered_set、unordered_multimap、 unordered_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入: O(...
set(集合)和multiset(多重集合):查找时间复杂度为O(log n),底层通常使用红黑树实现,具有较好的平衡性能。 map(映射)和multimap(多重映射):查找时间复杂度为O(log n),底层通常使用红黑树实现,按键进行自动排序。 stack(栈)和queue(队列):查找时间复杂度为O(n),因为它们是容器适配器,提供了先进先出(FIFO)或...
或称之为平方阶时间复杂度,此外还有三层循环结构嵌套组成的O(n^3)级别的时间复杂度,称之为立方阶时间复杂度,随着嵌套的增多,甚至还有O(n!)级,称之为阶层级时间复杂度,但是这种级别复杂度极高,程序运行极其缓慢。
此时思考:既要排序,又要可以二分,还要支持快速删除,我们可以联想到红黑树的性质,但是手撕红黑树太硬核了,可以借助set或map实现,这二者的查找/插入/删除/修改操作时间复杂度都是O(logn),符合时间复杂度要求。 参考代码 #include<bits/stdc++.h> #defineIOS ios::sync_with_stdio(false);cin.tie(nullptr);cout...
int minDistance(int dist[], int sptSet[]) { int min = INT_MAX, min_index;for (int v = 0; v < V; v++)if (sptSet[v] == 0 && dist[v] <= min)min = dist[v], min_index = v;return min_index;} // 狄克斯特拉算法 void dijkstra(int graph[V][V], int src) { int ...
「set」 set和multiset的区别在于容器里不能有重复元素 然后引出pair,用此类型的变量判断是否insert成功。 「pair」 「multimap」 multimap容器里的元素,都是pair形式的 multimap<T1,T2> mp; multimap中的元素按照first排序,并可以按first进行查找。 「map」 ...
int main(){ int n,i,j,k,t,m,a[25];while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ if(a[i]>a[j]){ t=a[i];a[i]=a[j];a[j]=t;//先进行排序,按从小到大的顺序依次排列,排列须...
map是STL中的一个关联容器,提供键值对的数据管理。底层通过红黑树来实现,实际上是二叉排序树和非严格意义上的二叉平衡树。所以在map内部所有的数据都是有序的,且map的查询、插入、删除操作的时间复杂度都是O(logN)。 unordered_map和map类似,都是存储key-value对,可以通过key快速索引到value,不同的是unordered_map...
1 关联性容器 之前的学习之中 , 我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构...而map与set是关联性容器 , 那什么是关联式容器?它与序列式容器有什么区别?...根据应