C 之STL中常用關聯容器使用方法

2021-07-27 10:59:15 字數 1355 閱讀 6279

在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 的基本操作有 入隊,如例 ...