priority_queue(優先佇列)是定義在 標頭檔案中的乙個模板類,與佇列相比,優先佇列不是按照入隊順序出隊,而是按照佇列中元素的優先權出隊。預設情況下,按照大者優先的順序出隊,也可以指定運算元來指定所需的優先順序。
priority_queueq1; //定義資料型別為int,預設大的先出隊
priority_queue< pair> q2; //定義資料型別為pair,預設大的先出隊
priority_queue, greater> q3; //定義小的先出隊
queueq 的基本操作有:(先進先出)
入隊,如例:q.push(x); 將x 接到佇列的末端。
出隊,如例:q.pop(); 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最早被壓入佇列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入佇列的元素。
判斷佇列空,如例:q.empty(),當佇列空時,返回true。
stack的基本操作:(先進後出)
size()
返回棧的元素數
o(1)
top()
返回棧頂的元素
o(1)
pop()
從棧中取出並刪除元素
o(1)
push(x)
向棧中新增元素x
o(1)
empty()
在棧為空時返回true
o(1)
vector:
(1)a.assign(b.begin(), b.begin()+3);//b為向量,將b的0~2個元素構成的向量賦給a
(2)a.assign(4,2);//是a只含4個元素,且每個元素為2
(3)a.back();//返回a的最後乙個元素
(4)a.front();//返回a的第乙個元素
(5)a[i]; //返回a的第i個元素
(6)a.clear();//清空a中的元素
(7)a.empty();//判斷a是否為空,空則返回ture,不空則返回false
(8)a.pop_back();//刪除a向量的最後乙個元素
(9)a.erase(a.begin()+1,a.begin()+3);//刪除a中第1個(從第0個算起)到第2個元素,也就是說刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最後乙個向量後插入乙個元素,其值為5
(11)a.insert(a.begin()+1,5);//在a的第1個元素(從第0個算起)的位置插入數值5,如a為1,2,3,4,插入元素後為1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1個元素(從第0個算起)的位置插入3個數,其值都為5
(13)a.insert(a.begin()+1,b+3,b+6);//b為陣列,在a的第1個元素(從第0個算起)的位置插入b的第3個元素到第5個元素(不包括b+6),如b為1,2,3,4,5,9,8,插入元素後為1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的個數;
(15)a.capacity();//返回a在記憶體中總共可以容納的元素個數
(16)a.rezize(10);//將a的現有元素個數調至10個,多則刪,少則補,其值隨機
(17)a.rezize(10,2);//將a的現有元素個數調至10個,多則刪,少則補,其值為2
(18)a.reserve(100);//將a的容量(capacity)擴充至100,也就是說現在測試a.capacity();的時候返回值是100.這種操作只有在需要給a新增大量資料的時候才 顯得有意義,因為這將避免記憶體多次容量擴充操作(當a的容量不足時電腦會自動擴容,當然這必然降低效能)
(19)a.swap(b);//b為向量,將a中的元素和b中的元素進行整體**換
(20)a==b; //b為向量,向量的比較操作還有!=,>=,<=,>,<
map:
std:mappersonnel;
這樣就定義了乙個用int作為索引,並擁有相關聯的指向string的指標.
map最基本的建構函式;
mapmapstring;
mapmapint;
mapmapstring;
map< char ,string>mapchar;
mapmapchar;
mapmapint;
map新增資料;
mapmaplive;
1.maplive.insert(pair(102,"aclive"));
2.maplive.insert(map::value_type(321,"hai"));
3, maplive[112]="april";//map中最簡單最常用的插入新增!
使用count,返回的是被查詢元素的個數。如果有,返回1;否則,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
使用find,返回的是被查詢元素的位置,沒有則返回map.end()。
#include < unordered_map >//無序
unordered_map:
優點: 因為內部實現了雜湊表,因此其查詢速度非常的快
缺點: 雜湊表的建立比較耗費時間
適用處:對於查詢問題,unordered_map
會更加高效一些,因此遇到查詢問題,常會考慮一下用unordered_map
set容器:
類似與乙個集合,它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set作為乙個容器也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。
c STL 容器 聯合容器
stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...
C STL容器總結
三大類容器 1.序列式容器 vector deque list vector是一種動態陣列,在記憶體中具有連續的儲存空間,支援快速隨機訪問。由於具有連續的儲存空間,所以在插入和刪除操作方面,效率比較慢。vector有多個建構函式,預設的建構函式是構造乙個初始長度為0的記憶體空間,且分配的記憶體空間是...
c STL容器基礎
stl序列式容器也叫線性容器.包括 array vector deque list 和 forward list 容器。1.stl容器的型別 簡單的理解容器,它就是一些模板類的集合,但和普通模板類不同的是,容器中封裝的是組織資料的方法 也就是資料結構 stl 提供有 3 類標準容器,分別是序列容器 ...