1. Requisitos previos
Importar el archivo de encabezado:
#include <unordered_set>
Dos, lo que es unordered_set
El contenedor unordered_set se puede traducir literalmente como "contenedor de conjunto desordenado". Es decir, el contenedor conjunto_desordenado es muy similar al contenedor conjunto, la única diferencia es que el contenedor conjunto ordenará los datos almacenados por sí mismo, pero el contenedor conjunto_desordenado no lo hará.
Varias características de unordered_set:
- Los datos ya no se almacenan en forma de pares clave-valor, sino que el valor de los datos se almacena directamente;
- Los valores de cada elemento almacenado en el contenedor no son iguales entre sí y no se pueden modificar;
- No ordena los datos almacenados internamente
3. Inicialización de unordered_set
Crear un conjunto vacío
unordered_set<int> set1;
copiar construcción
unordered_set<int> set2(set1);
usar la construcción del iterador
unordered_set<int> set3(set1.begin(), set1.end());
Construir con una matriz como su valor inicial
unordered_set<int> set4(arr,arr+5);
estructura móvil
unordered_set<int> set5(move(set2));
Construir con lista de disposición
unordered_set<int> set6 {
1,2,10,10};
4. Funciones integradas comúnmente utilizadas de unordered_set
función vacía () - para determinar si está vacío
// Si el contenedor está vacío, devuelve verdadero; de lo contrario, falso
set1.empty();
Función find () - buscar
// encontrar 2, devolver iterador si se encuentra, devolver end () en caso de falla
set1.find(2);
función count () - número de ocurrencias
// devuelve el número de ocurrencias de 2, 0 o 1
set1.count(2);
función insert() - inserta un elemento
//插入元素,返回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());
Con respecto al valor de retorno de la función de inserción:
insert() solo pasa un único parámetro (el elemento que se insertará)
- devolverá un objeto par
- El objeto de par contiene un iterador y un valor booleano adicional que indica si la inserción se realizó correctamente.
- Si se insertó el elemento, el iterador devuelto apuntará al nuevo elemento
- Si no se inserta, iterador al elemento que impidió la inserción
auto pr = words.insert("ninety"); // Returns a pair - an iterator & a bool value
insert() pasa dos parámetros (iterador + elemento a insertar)
- Se puede usar un iterador como primer parámetro de insert(), que especifica la posición en la que se insertará el elemento.
- En este caso, solo se devolverá un iterador.
auto iter = words.insert (pr.first, "nine"); // 1st arg is a hint. Returns an iterator
insert() pasa en la lista de inicialización
- insertar elementos en la tabla de inicialización
- En este caso no se devuelve nada.
words.insert({
"ten", "seven", "six"}); // Inserting an initializer list
función emplace () - elementos de inserción (construcción de transferencia)
//使用转移构造函数添加新元素3,比insert效率高
set1.emplace(3);
función erase() - eliminar un elemento
//删除操作,成功返回1,失败返回0
set1.erase(1);
//删除操作,成功返回下一个pair的迭代器
set1.erase(set1.find(1));
//删除set1的所有元素,返回指向end的迭代器
set1.erase(set1.begin(), set1.end());
función bucket_count() - el número de cestas
//返回容器中的篮子总数
set1.bucket_count();
función bucket_size() - el número de elementos en la cesta
//返回1号篮子中的元素数
set1.bucket_size(1);
función cubo () - en qué cesta
//元素1在哪一个篮子
set1.bucket(1);
Función borrar () - borrar
set1.clear();
función load_factor() - factor de carga
//负载因子,返回每个篮子元素的平均数,即size/float(bucket_count);
set1.load_factor();
función rehash() - establece el número de cestas y redistribuye
//设置篮子的数量为20,并且重新rehash
set1.rehash(20);