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引數1 _value key和value的資料報_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>
引數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();
//七 hash funcrehash 設定槽數
c1.rehash(1
);
//reserve 請求改變容器容量
c1.reserve(1000);
//八 測試**hash_function() 返回與hash_func相同功能的函式指標
auto hash_func_test =c1.hash_function();
//key_eq() 返回比較key值得函式指標
auto key_eq_test = c1.key_eq();
#include #includeusing
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.包含 迭代器介面卡 運用繼承方式,實現適配功能,其實現與仿函式介面卡相...