C++常用語法——unordered_set部分(完善中)
阿新 • • 發佈:2021-08-19
1、unordered_set是什麼
unordered_set 容器,可直譯為“無序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的區別就在於 set 容器會自行對儲存的資料進行排序,而 unordered_set 容器不會。
unordered_set的幾個特性:
-
不再以鍵值對的形式儲存資料,而是直接儲存資料的值
-
容器內部儲存的各個元素的值都互不相等,且不能被修改
-
不會對內部儲存的資料進行排序
2、unordered_set的初始化
建立空的set
unordered_set<int> set1;
拷貝構造
unordered_set<int> set2(set1);
使用迭代器構造
unordered_set<int> set3(set1.begin(), set1.end());
使用陣列作為其初值進行構造
unordered_set<int> set4(arr,arr+5);
移動構造
unordered_set<int> set5(move(set2));
使用處置列表進行構造
unordered_set<int> set6 {1,2,10,10};
3、unordered_set的常用內建函式
empty()函式——判斷是否為空
//若容器為空,則返回 true;否則 false set1.empty();
find()函式——查詢
//查詢2,找到返回迭代器,失敗返回end()
set1.find(2);
count()函式——出現次數
//返回指2出現的次數,0或1
set1.count(2);
insert()函式——插入元素
//插入元素,返回pair<unordered_set<int>::iterator, bool> set1.insert(3); //使用initializer_list插入元素 set1.insert({1,2,3}); //指定插入位置,如果位置正確會減少插入時間,返回指向插入元素的迭代器 set1.insert(set1.end(), 4); //使用範圍迭代器插入 set1.insert(set2.begin(), set2.end());
emplace()函式——插入元素(轉移構造)
//使用轉移建構函式新增新元素3,比insert效率高
set1.emplace(3);
erase()函式——刪除元素
//刪除操作,成功返回1,失敗返回0
set1.erase(1);
//刪除操作,成功返回下一個pair的迭代器
set1.erase(set1.find(1));
//刪除set1的所有元素,返回指向end的迭代器
set1.erase(set1.begin(), set1.end());
bucket_count()函式——籃子數目
//返回容器中的籃子總數
set1.bucket_count();
bucket_size()函式——籃子中元素數目
//返回1號籃子中的元素數
set1.bucket_size(1);
bucket()函式——在哪個籃子
//元素1在哪一個籃子
set1.bucket(1);
clear()函式——清空
set1.clear();
load_factor()函式——負載因子
//負載因子,返回每個籃子元素的平均數,即size/float(bucket_count);
set1.load_factor();
rehash()函式——設定籃子數目並重新分佈
//設定籃子的數量為20,並且重新rehash
set1.rehash(20);
4、遍歷unordered_set
使用迭代器遍歷
for(unordered_set<int>::iterator it = set1.begin(); it != set1.end(); ++it)
cout << *it << " ";
C++11新方法
for(int x : set1)
cout << x << " ";