【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map
@Author:Runsen
STL 中的棧容器是一種容器適配器。在棧容器中,元素在一端插入并在同一端刪除。
stack
為了實(shí)現(xiàn)堆棧容器,我們需要在我們的程序中包含頭文件<stack>。
#include<stack>stack容器的一般聲明語法是:
stack<objectType> stackNam下面介紹下STL 中stack容器支持的各種操作。
- push 操作用于在堆棧中插入一個(gè)元素。此操作始終在堆棧頂部添加元素。
- pop 操作用于從堆棧中刪除元素。移除的元素是棧頂指向的元素。
- top : 返回棧頂元素。
- empty : 檢查堆棧是否為空。
- size:返回棧的大小,即棧中元素的數(shù)量。
queue
元素添加到隊(duì)列的后面,而從隊(duì)列的前面刪除。一般來說,隊(duì)列采用先進(jìn)先出(FIFO)的排列方式。
要在程序中實(shí)現(xiàn)隊(duì)列容器,我們必須在代碼中包含一個(gè)頭文件 <queue>。
隊(duì)列支持的各種操作。
- empty() – 返回隊(duì)列是否為空。
- size() – 返回隊(duì)列的大小。
- swap():交換兩個(gè)隊(duì)列的內(nèi)容,但隊(duì)列的類型必須相同,盡管大小可能不同。
- emplace():在隊(duì)列容器中插入一個(gè)新元素,新元素被添加到隊(duì)列的末尾。
- queue::front() 和 queue::back() – front()函數(shù)返回對(duì)隊(duì)列第一個(gè)元素的引用。back()函數(shù)返回對(duì)隊(duì)列最后一個(gè)元素的引用。
- push(g) 和 pop() – push()函數(shù)在隊(duì)列末尾添加元素“g”。pop()函數(shù)刪除隊(duì)列的第一個(gè)元素。
map
map是具有鍵值對(duì)的關(guān)聯(lián)容器,因此鍵值始終是唯一的。map中的鍵可以插入或刪除,但不能更改。另一方面,可以更改與鍵關(guān)聯(lián)的值。
- at 和 [ ]:運(yùn)算符 at和 [ ] 用于訪問map元素。at 和 [] 具有相同的功能,但只有一個(gè)區(qū)別。如果映射中不存在訪問的鍵,則“at ”運(yùn)算符會(huì)引發(fā)異常。而 [ ] 運(yùn)算符會(huì)在映射中不存在訪問的鍵時(shí)在map中插入新鍵。
- begin : 返回map中第一個(gè)元素的迭代器。
- end:返回指向map中最后一個(gè)元素之后的元素的迭代器。
輸出如下
The map mymap is :KEY VALUE1 102 203 30The map mymap is :KEY VALUE1 102 103 10unordered_map
unordered_map 是一個(gè)關(guān)聯(lián)容器,用于存儲(chǔ)由鍵值和映射值組合形成的元素。map的API 對(duì)于unordered_map 的操作基本相同。
#include <iostream> #include <unordered_map> using namespace std;int main() {unordered_map<string, int> umap;umap["1"] = 10;umap["2"] = 20;umap["3"] = 30;for (auto x : umap)cout << x.first << " " << x.second << endl;}map和unordered_map的對(duì)比:
map 操作的平均時(shí)間復(fù)雜度為 O(log n) 而對(duì)于 unordered_map,平均時(shí)間復(fù)雜度為 O(1)。
對(duì)于查找問題,unordered_map會(huì)更加高效一些,因此遇到查找問題,常會(huì)考慮一下用unordered_map,但是空間占用上unorder_map要高于map,因?yàn)閡norder_map占用的內(nèi)存更加高一點(diǎn),unorder_map內(nèi)部采用hash表,map內(nèi)部采用的是紅黑樹,內(nèi)存占有率的問題轉(zhuǎn)化成hash表 VS 紅黑樹,還是unorder_map內(nèi)存要高一點(diǎn)
總結(jié)
以上是生活随笔為你收集整理的【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么收入越高税越高
- 下一篇: 【小白学习C++ 教程】二十三、如何安装