C++ 共通構文 - unordered_set

1.前提条件

ヘッダー ファイルをインポートします。

#include <unordered_set>

二、unordered_setとは

unordered_set コンテナーは、文字通り「順序付けられていないセット コンテナー」と訳すことができます。つまり、unordered_set コンテナーは set コンテナーに非常に似ています。唯一の違いは、set コンテナーは格納されたデータをそれ自体でソートしますが、unordered_set コンテナーはソートしないことです。

unordered_set のいくつかの機能:

  1. データはキーと値のペアの形式で保存されなくなりましたが、データの値は直接保存されます。
  2. コンテナに格納されている各要素の値は互いに等しくなく、変更できません。
  3. 内部に保存されたデータをソートしません

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 つのパラメーター (挿入される要素) のみを渡します。

  1. ペアオブジェクトを返します
  2. ペア オブジェクトにはイテレータと、挿入が成功したかどうかを示す追加のブール値が含まれています
  3. 要素が挿入された場合、返されたイテレータは新しい要素を指します
  4. 挿入されない場合は、挿入を妨げた要素への反復子
auto pr = words.insert("ninety"); // Returns a pair - an iterator & a bool value

insert() は 2 つのパラメーター (イテレーター + 挿入する要素) を渡します。

  1. イテレータは、要素が挿入される位置を指定する insert() の最初のパラメータとして使用できます。
  2. この場合、イテレータのみが返されます
auto iter = words.insert (pr.first, "nine"); // 1st arg is a hint. Returns an iterator

insert() は初期化リストを渡します

  1. 初期化テーブルに要素を挿入します
  2. この場合、何も返されません
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);

おすすめ

転載: blog.csdn.net/LiuXF93/article/details/120899401