三 關聯式容器 有序

2021-08-06 02:10:38 字數 3186 閱讀 4896

標籤(空格分隔): c++stl

關聯式容器是關聯式陣列概念的推廣

- 依據特定的排序規則,自動為其元素排序

- 由二叉樹實現

- 提供對元素的快速訪問

主要的有序關聯式容器有:

- set:關鍵字和資料檔案是同乙個值。具有唯一性

- multiset:類似,但是包含重複的元素

- map: 成對資料的容器。鍵值對,唯一性

- multimap:類似,可以重複

無序關聯容器:

- unordered_map:

- unordered_multimap

- unordered_set

- unordered_multiset

宣告:

template key,class traits=less,class allocator= allocator > class

set;

說明一下排序規則:

- 反對稱的:xy為假

- 可傳遞的:xless函式物件模板,定義在functional標頭檔案中

自定義排序規則:

std::set

> s1;//第一種方法

sets2(less()); //第二種方式

初始化:

set

s;set

s1(s);

set s = //初始化列表的方法

等等

賦值:

- emplace 就地構造元素

- insert 插入乙個元素

刪除:

- erase 刪除元素

- clear 刪除全部內容

- swap 交換內容

key_compare key_comp()const;

key_compare value_comp() const;

key_compare 決定集合中的排列順序。

使用方法:

set

s;set

::key_compare func = s.key_comp();

例子:

#include 

template

void printsetvalue( set

s)int main()

; set

::iterator iter;

pair::iterator, set

::iterator> p;

cout

<< "--------insert---------"

<< endl;

s.insert("wa_ha_ha");

s.insert("ma_ma_ma");

printsetvalue(s) ;

cout

<< "---------equal_range--------"

<< endl;

p = s.equal_range("dat");

cout

<< "不小於的第乙個值:"

<< *p.first<< endl;

cout

<< "大於的第乙個值:"

<< *p.second << endl;

cout

<< "---------lower_bound 和upper_bound --------"

<< endl;

iter = s.lower_bound("dat");

cout

<< "不小於的第乙個值:"

<< *iter<< endl;

iter = s.upper_bound("dat");

cout

<< "大於的第乙個值:"

<< *iter << endl;

}

輸出為:

---

----

-insert--

----

---set:

abdbar

cardat

dela

fore

ma_ma_ma

male

wa_ha_ha--

----

---equal_range--

----

--不小於的第乙個值:dat

大於的第乙個值:dela--

----

---lower_bound

和upper_bound--

----

--不小於的第乙個值:dat

大於的第乙個值:dela

兩個型別基本一致。

建構函式:

建構函式

備註map c / multimap c

產生乙個空的map或者multimap

map c(op) /multimap c(op)

產生乙個以op為準則,空的map/multimap

map c1(c) / multimap c2(c)

產生c 的副本

map c(beg,end) / multimap c(beg,end)

用迭代器範圍產生乙個新map/multimap

map c(beg,end,op) / multimap c(beg,end,op)

以op為排序規則,用迭代器產生

排序形式:

map效果

map/multimap以less()為排序準則

map/multimap以op為準則

元素的訪問:

- at() (c++11):不存在,返回out_of_range 異常

- operator[k]:若k不存在,則新增關鍵字k,並且初始化

容量:

- empty

- size

- max_size

賦值:

- emplace

- insert

刪除:

- clear

- erase

- swap

C 容器(三)關聯容器

set,multiset,map,multimap 是一種非線性的樹結構,具體的說採用的是一種比較高效的特殊的平衡檢索二叉樹 紅黑樹結構。因為關聯容器的這四種容器類都使用同一原理,所以他們核心的演算法是一致的,但是它們在應用上又有一些差別,先描述一下它們之間的差別。1 set 又稱集合,實際上就是一...

有序關聯容器

關聯容器 類a沒有 操作符 bool compare const a a1,const a a2 set a,decltype compare book compare pair author map word count string word while cin word word count ...

關聯式容器

關聯式容器是用來儲存資料的,與序列式容器不同的是,其儲存的是結構的鍵值對,在資料檢索時比序列式容器效率更高。鍵值對 用來表示具有一一對應關係的結構,該結構中一般只含兩個成員變數key和value,key代表鍵值,value表示與key對應的資訊。比如 現在要建立乙個英漢互譯的字典,那該字典中必然有英...