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