C 中常用的雜湊結構

2021-10-20 18:22:11 字數 869 閱讀 6416

以下主要談談set和map

集合底層實現

是否有序

數值是否可以重複

能否改變量值

查詢效率

增刪效率

set紅黑樹有序否

否o(logn)

o(logn)

multiset

紅黑樹有序是否

o(logn)

o(logn)

unordered_set

雜湊表無序否否

o(1)

o(1)

c++中提供了三種set資料結構,其底層實現以及優劣如上表所示,紅黑樹是一棵平衡二叉搜尋樹,所以key值是有序的,但key不可更改,改動key值會導致整棵樹的錯亂,所以只能刪除和增加。

當需要使用到集合來解決雜湊問題的時候,首先考慮使用unordered_set,如果需要資料有序,則使用set,如果需要資料不可重複。則需要使用multiset。

對映底層實現

是否有序

數值是否可以重複

能否改變量值

查詢效率

增刪效率

map紅黑樹

key有序

key不可重複

key不可更改

o(logn)

o(logn)

multimap

紅黑樹key有序

key可重複

key不可更改

o(logn)

o(logn)

unordered_map

雜湊表key無序

key不可重複

key不可更改

o(1)

o(1)

map是乙個結構,map中對key有限制,而對value沒有限制,因為key的儲存方式是紅黑樹來實現的。總結

C 中常用結構

判斷語句結構要求程式設計師指定乙個或多個要評估或測試的條件,以及條件為真是要執行的語句和條件為假時要執行的語句.語句 描述 if 語句 乙個 if語句由乙個布林表示式後跟乙個或多個語句組成。if.else 語句 乙個if語句後可跟乙個可選的 else語句,else 語句在布林表示式為假時執行。巢狀 ...

c 雜湊結構

雜湊表查詢演算法 hash include include define true 1 define false 0 define hashsize 7 define nullkey 32768 無效索引 typedef int status int m 0 雜湊表表長 typedef struct...

C中常用的巨集

define 定義乙個預處理巨集 undef 取消巨集的定義 include 包含檔案命令 if 編譯預處理中的條件命令,相當於c語法中的if語句 ifdef 判斷某個巨集是否被定義,若已定義,執行隨後的語句 ifndef 與 ifdef相反,判斷某個巨集是否未被定義 elif 若 if,ifdef...