Explicación detallada del conjunto de colección de C++ STL

Parte I Atención

inserte la descripción de la imagen aquí

setPuntos a tener en cuenta al usar :

  • añadir cita#include <set>
  • A diferencia de maplos contenedores multimap, setcada par clave-valor almacenado en el contenedor requiere que la clave keyy el valor valuesean iguales.
  • Los elementos del contenedor asociativo set(colección) son únicos y el sistema los ordenará automáticamente según sus valores.
  • El contenedor asociativo estándar en C++ STL set, multiset, map, multimaputiliza un árbol binario de recuperación balanceada muy eficiente: árbol rojo-negro, también conocido como árbol RB (árbol rojo-negro).

Sitio web oficial: https://cplusplus.com/reference/set/

Parte II Función

Cap.Configuro funciones en el archivo de cabecera

Las funciones comúnmente utilizadas en el conjunto se muestran en la siguiente figura

inserte la descripción de la imagen aquí
A continuación se incluye una tabla que explica el significado de estas funciones.

función significado
begin() Devuelve un iterador bidireccional que apunta al primer elemento (nota, el primero ordenado) en el contenedor. Si el contenedor del conjunto está calificado como const, este método devuelve un iterador bidireccional de tipo const.
end() Devuelve un iterador bidireccional que apunta a la posición después del último elemento del contenedor (tenga en cuenta que es el último que se ha ordenado) , generalmente begin()se usa junto con . Si el contenedor del conjunto está calificado como const, este método devuelve un iterador bidireccional de tipo const.
rbegin() Devuelve un iterador bidireccional inverso que apunta al último (nota, el último elemento ordenado). Si el contenedor del conjunto está calificado para const, este método devuelve un iterador bidireccional inverso de tipo const.
rend() Devuelve un iterador bidireccional inverso que apunta a la posición anterior a la posición del primer elemento (nota, el primer elemento ordenado). Si el contenedor del conjunto está calificado para const, este método devuelve un iterador bidireccional inverso de tipo const.
cbegin() Tiene begin()la misma función que , excepto que se agrega el atributo const encima, que no se puede usar para modificar el valor del elemento almacenado en el contenedor.
cend() Tiene end()la misma función que , excepto que se agrega el atributo const encima, que no se puede usar para modificar el valor del elemento almacenado en el contenedor.
crbegin() Tiene rbegin()la misma función que , excepto que se agrega el atributo const encima, que no se puede usar para modificar el valor del elemento almacenado en el contenedor.
crend() Tiene rend()la misma función que , excepto que se agrega el atributo const encima, que no se puede usar para modificar el valor del elemento almacenado en el contenedor.
find(val) Busque el elemento cuyo valor es val en el contenedor del conjunto, si lo encuentra correctamente, devuelva el iterador bidireccional que apunta al elemento; de lo contrario, devuelva el mismo end()iterador que el método. Además, si el contenedor del conjunto está calificado como const, este método devuelve un iterador bidireccional de tipo const.
lower_bound(val) Devuelve un iterador bidireccional que apunta al primer elemento mayor o igual que val en el contenedor del conjunto actual. Si el contenedor del conjunto está calificado como const, este método devuelve un iterador bidireccional de tipo const.
upper_bound(val) Devuelve un iterador que apunta al primer elemento mayor que val en el contenedor del conjunto actual. Si el contenedor del conjunto está calificado como const, este método devuelve un iterador bidireccional de tipo const.
equal_range(val) Este método devuelve un objeto de par (contiene dos iteradores bidireccionales), donde el valor de retorno del método pair.firsty son equivalentes, y el valor de retorno del método es equivalente. Es decir, el método devolverá un rango que contiene elementos con el valor val (cada elemento en el contenedor del conjunto es único, por lo que el rango contiene como máximo un elemento).lower_bound()pair.secondupper_bound()
empty() Devuelve verdadero si el contenedor está vacío; de lo contrario, falso.
size() Devuelve el número de elementos almacenados en el contenedor del conjunto actual.
max_size() Devuelve el número máximo de elementos que puede contener el contenedor establecido. Diferentes sistemas operativos tienen diferentes valores de retorno.
insert() Inserte elementos en el contenedor del conjunto.
erase() Elimina los elementos almacenados en el contenedor del conjunto.
swap() Intercambia todos los elementos almacenados en 2 contenedores establecidos. Esto significa que los 2 conjuntos de contenedores en los que se opera deben ser del mismo tipo.
clear() Borre todos los elementos en el contenedor del conjunto, es decir, el contenedor del conjunto size()es 0.
emplace() Construye un nuevo elemento directamente en la posición especificada en el contenedor del conjunto actual. Su efecto es el mismo que insert(), pero más eficiente.
emplace_hint() En esencia, emplace()es lo mismo que el método de construcción de nuevos elementos en el contenedor del conjunto, la diferencia es que el usuario debe proporcionar a este método un iterador que indique la posición donde se genera el nuevo elemento como primer parámetro del método.
count(val) En el contenedor del conjunto actual, encuentre el número de elementos cuyo valor es val y devuélvalo. Tenga en cuenta que dado que el valor de cada elemento en el contenedor del conjunto es único, el valor de retorno máximo de esta función es 1.

Funciones en el algoritmo Cap.II

En el archivo de cabecera #include <algorithm>hay operaciones relacionadas con conjuntos como intersección, unión, diferencia, etc.

  • set_intersection: toma conjunto intersección
  • set_union: buscar y unir
  • set_difference: toma la diferencia establecida
  • set_symmetric_difference: Tome la diferencia simétrica establecida

El uso de estas funciones es casi el mismo. Todas tienen 5 parámetros. El significado de los primeros 4 parámetros es el mismo. Hay dos tipos del quinto parámetro. Tome esto como un ejemplo set_union():

  • set_union(A.begin(),A.end(),B.begin(),B.end(),inserter(C1 , C1.begin()));
  • set_union(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator(cout," “));

Los primeros dos parámetros de los primeros cuatro parámetros son la suma Ade begin()conjuntos end(); el tercer y cuarto parámetro son la suma Bde begin()conjuntos end(); el significado del primer uso es almacenar el resultado de la unión C1en el conjunto, y el significado del segundo el uso es almacenar Buscar la salida del resultado de la unión.


Además, la conversión about sety vectormutua se puede realizar de la siguiente manera:

vector<int> v;
v = {
    
    1,2,2,3,3,4};					//建立vector
set<int> st(v.begin(), v.end());	//在构造函数中可以直接实现vector转set
v.assign(st.begin(), st.end());		//用assign实现set转vector

Parte III Código

Problema 2032 en LeetCode . Los valores que aparecen en al menos dos matrices son muy adecuados setpara esto. Aquí está C++la solución:

class Solution {
    
    
public:
    vector<int> twoOutOfThree(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3) {
    
    
        set<int> s1(nums1.begin(),nums1.end()), s2(nums2.begin(),nums2.end()), s3(nums3.begin(),nums3.end()), s12,s13,s23;
        set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s12, s12.begin() ));
        set_intersection(s1.begin(),s1.end(),s3.begin(),s3.end(),inserter(s12, s12.end() ));
        set_intersection(s2.begin(),s2.end(),s3.begin(),s3.end(),inserter(s12, s12.end() ));
        vector<int> ans;
        ans.assign(s12.begin(), s12.end());
        return ans;
    }
};

Supongo que te gusta

Origin blog.csdn.net/Gou_Hailong/article/details/128398866
Recomendado
Clasificación