在stl中常用的關聯容器有set和map,其他multiset和multimap是這兩個容器的擴充套件,區別就是打破了鍵值得唯一性,而在set和map中鍵值是唯一的,即使插入兩個相同鍵的資料,在容器中也只保留乙個。set容器內部只有鍵值而沒有實值(我也不知道為什麼還能稱之為關聯容器),而map裡存放著元素是pair物件。
set和map內部都實現了紅黑樹的結構就是平衡搜尋樹。所以它的優勢是快速的插入刪除、以及查詢,其時間複雜度是log2n。
一. set
1.建立物件
set
s;//對於不是自己定義的資料型別,像int,double等可以不定義比較方式。
set s;
//自定義比較結構體
set s;
//自定義資料型別
//不是自定義的資料型別 ,定義比較結構就行,內部過載()
//注意不是只定義比較函式,因為set引數是結構體型別
struct cmpstruct
}//對於自定義的資料型別 ,內部要過載《運算子
struct definestruct
}
2.插入刪除
insert(key):容器內部會根據紅黑樹的結構插入到相應位置。
erase(key):刪除相應鍵值。
3.遍歷
由於內部結構直接遍歷(中序遍歷)出的就是排序好的資料,這裡遍歷不像vector,只能使用迭代器。
4.查詢
find(key):返回相應位址位置,iterator型別。如果找不到,返回值為s.end()。
set
s::iterator it = s.find(key);
if(it != s.end())
cout
<<"找到了";
else
cout
<<"沒找到";
二. map
map的操作和set基本一樣,優勢同樣是快速插入刪除,查詢。
建立物件時要自定義比較函式的同set
1.插入
insert(pair(a,b))插入pair物件
map過載了操作符,m[key]=new_value;可以實現修改實值得功能,當key不存在與map中時,會建立key並初始化為new_value;
還可以用於訪問元素,像陣列一樣。
2.刪除
通過key刪除資料
erase(key)
3,查詢和set也是一樣的
C 中常見stl關聯容器的比較
c 11標準庫中主要介紹了以下8種關聯容器,其區別如下 實現 平衡二叉樹。優點 自動排序使得查詢有良好效能。缺點 不能直接改變元素值,改變樹則亂。set與multiset的區別 前者每乙個元素只能出現一次,不允許重複 後者元素可以重複。實現 平衡二叉樹。優點 自動以key值大小排序使得查詢有良好效能...
C 之stack容器使用
c stack 堆疊 是乙個容器的改編,它實現了乙個先進後出的資料結構 filo 使用該容器時需要包含 include標頭檔案 定義stack物件的示例 如下 stacks1 stacks2 stack的基本操作有 1.入棧 如s.push x 2.出棧 如 s.pop 注意 出棧操作只是刪除棧頂的...
C 之queue容器使用
queue 模板類的定義在標頭檔案中。與stack 模板類很相似,queue 模板類也需要兩個模板引數,乙個是元素型別,乙個容器類 型,元素型別是必要的,容器型別是可選的,預設為deque 型別。定義queue 物件的示例 如下 queueq1 queueq2 queue 的基本操作有 入隊,如例 ...