1.前提条件
ヘッダー ファイルをインポートします。
#include <unordered_set>
二、unordered_setとは
unordered_set コンテナーは、文字通り「順序付けられていないセット コンテナー」と訳すことができます。つまり、unordered_set コンテナーは set コンテナーに非常に似ています。唯一の違いは、set コンテナーは格納されたデータをそれ自体でソートしますが、unordered_set コンテナーはソートしないことです。
unordered_set のいくつかの機能:
- データはキーと値のペアの形式で保存されなくなりましたが、データの値は直接保存されます。
- コンテナに格納されている各要素の値は互いに等しくなく、変更できません。
- 内部に保存されたデータをソートしません
3. unordered_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};
4. unordered_set の一般的に使用される組み込み関数
empty() 関数 - 空かどうかを判断する
//コンテナが空の場合は true を返し、それ以外の場合は false を返します
set1.empty();
find() 関数 -
//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());
挿入関数の戻り値について:
insert() は 1 つのパラメーター (挿入される要素) のみを渡します。
- ペアオブジェクトを返します
- ペア オブジェクトにはイテレータと、挿入が成功したかどうかを示す追加のブール値が含まれています
- 要素が挿入された場合、返されたイテレータは新しい要素を指します
- 挿入されない場合は、挿入を妨げた要素への反復子
auto pr = words.insert("ninety"); // Returns a pair - an iterator & a bool value
insert() は 2 つのパラメーター (イテレーター + 挿入する要素) を渡します。
- イテレータは、要素が挿入される位置を指定する insert() の最初のパラメータとして使用できます。
- この場合、イテレータのみが返されます
auto iter = words.insert (pr.first, "nine"); // 1st arg is a hint. Returns an iterator
insert() は初期化リストを渡します
- 初期化テーブルに要素を挿入します
- この場合、何も返されません
words.insert({
"ten", "seven", "six"}); // Inserting an initializer list
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);