STL標準庫 容器 unordered set

2022-08-31 17:15:26 字數 3988 閱讀 6326

unordered_set與與unordered_map相似,這次主要介紹unordered_set

unordered_set它的實現基於hashtable,它的結構圖仍然可以用下圖表示,這時的空白格不在是單個value,而是set中的key與value的資料報

有unordered_set就一定有unordered_multiset.跟set和multiset一樣,乙個key可以重複乙個不可以

unordered_set是一種無序集合,既然跟底層實現基於hashtable那麼它一定擁有快速的查詢和刪除,新增的優點.基於hashtable當然就失去了基於rb_tree的自動排序功能

unordered_set無序,所以在迭代器的使用上,set的效率會高於unordered_set

template

_value,

class _hash = hash<_value>,

class _pred = std::equal_to<_value>,

class _alloc = std::allocator<_value> >

class

unordered_set

: public __unordered_set<_value _hash _pred _alloc>  

引數1 _value key和value的資料報

引數2 _hash hashfunc獲取hashcode的函式

引數3 _pred 判斷key是否相等

引數4 分配器

下面介紹一下unordered_set的基本使用,最後我會分享一下我的測試**

一 定義

//

定義 unordered_setc1;

//operator=

unordered_setc2;

c2 = c1;

二 容量操作

//

判斷是否為空

c1.empty();

//獲取元素個數 size()

c1.size();

//獲取最大儲存量 max_size()

c1.max_size();

三 迭代器操作

//

返回頭迭代器 begin()

unordered_set::iterator ite_begin =c1.begin();

//返回尾迭代器 end()

unordered_set::iterator ite_end =c1.end();

//返回const頭迭代器 cbegin()

unordered_set::const_iterator const_ite_begin =c1.cbegin();

//返回const尾迭代器 cend()

unordered_set::const_iterator const_ite_end =c1.cend();

//槽迭代器

unordered_set::local_iterator local_iter_begin = c1.begin(1

); unordered_set

::local_iterator local_iter_end = c1.end(1);

四 基本操作

//

查詢函式 find() 通過給定主鍵查詢元素

unordered_set::iterator find_iter = c1.find(1

);

//value出現的次數 count() 返回匹配給定主鍵的元素的個數

c1.count(1

);

//返回元素在哪個區域equal_range() 返回值匹配給定搜尋值的元素組成的範圍

pairint>::iterator, unordered_set::iterator> pair_equal_range = c1.equal_range(1

);

//插入函式 emplace()

c1.emplace(1

);

//插入函式 emplace_hint() 使用迭代器

c1.emplace_hint(ite_begin, 1

);

//插入函式 insert()

c1.insert(1

);

//刪除 erase()

c1.erase(1);//

1.迭代器 value 區域

//清空 clear()

c1.clear();

//交換 swap()

c1.swap(c2);

五 籃子操作

//

籃子操作 籃子個數 bucket_count() 返回槽(bucket)數

c1.bucket_count();

//籃子最大數量 max_bucket_count() 返回最大槽數

c1.max_bucket_count();

//籃子個數 bucket_size() 返回槽大小

c1.bucket_size(3

);

//返回籃子 bucket() 返回元素所在槽的序號

c1.bucket(1

);

//load_factor 返回載入因子,即乙個元素槽(bucket)的最大元素數

c1.load_factor();

//max_load_factor 返回或設定最大載入因子

c1.max_load_factor();

六 記憶體操作

//

rehash 設定槽數

c1.rehash(1

);

//reserve 請求改變容器容量

c1.reserve(1000);

七 hash func

//

hash_function() 返回與hash_func相同功能的函式指標

auto hash_func_test =c1.hash_function();

//key_eq() 返回比較key值得函式指標

auto key_eq_test = c1.key_eq();

八 測試**

#include #include 

using

namespace

std;

namespace

wzj001

void initunorderset(unordered_set&tmp)

string turnbooltostring(bool

tmp)

void

basicoperationunorderedset()

void

unordersetelementlookup()

else

cout

<< "

沒找到 !

"<

cout

<< "

value出現次數 :

"<1)<< endl; //

set key不可重複

pair

int>::iterator, std::unordered_set::iterator> tmp = c_find.equal_range(5

);

if(tmp.first != c_find.end()&& tmp.second !=c_find.end())

}void

unordersetbuckets()

void

unordersethashpolicy()

void

unordersetobservers()

}int

main()

STL標準庫 容器 forward list

forward list即單向list,功能少額外開銷就小.而且只能在前段插入元素 結構如下 一 定義 include int main int argc,const char ar return0 二 與迭代器的使用 由於forward list的迭代器內指向記憶體不連續 顧不能做迭代器 操作 i...

STL標準庫 容器介面卡

上一節介紹了仿函式介面卡,這節主要介紹容器介面卡和迭代器介面卡的概念,其實容器介面卡和迭代器其介面卡就是封裝了一些其他class的方法,非常好理解.如果你想讓乙個calss擁有另乙個class的功能,你都可以這樣做 1.繼承 2.包含 迭代器介面卡 運用繼承方式,實現適配功能,其實現與仿函式介面卡相...

STL標準庫 容器介面卡

上一節介紹了仿函式介面卡,這節主要介紹容器介面卡和迭代器介面卡的概念,其實容器介面卡和迭代器其介面卡就是封裝了一些其他class的方法,非常好理解.如果你想讓乙個calss擁有另乙個class的功能,你都可以這樣做 1.繼承 2.包含 迭代器介面卡 運用繼承方式,實現適配功能,其實現與仿函式介面卡相...