Utilice el contenedor de conjuntos STL en C++
-
Utilice
std::set
para declarar un objeto contenedor de conjunto en C++ -
Utilice la función miembro
insert
para insertar un elemento en un conjunto en C++ -
Utilice la función de miembro
find
para recuperar el iterador del elemento con la clave dada en C++ -
Utilice la función de miembro
contains
para comprobar si el elemento con la clave dada existe en un conjunto en C++
Este artículo demostrará varios métodos sobre cómo utilizar el contenedor STL set
en C++.
Utilice std::set
para declarar un objeto contenedor de conjunto en C++
El comando std::set
implementa un conjunto ordenado de objetos únicos como un contenedor asociativo. Los elementos se ordenan con la función de comparación std::less
de forma predeterminada, pero el usuario puede proporcionar la función personalizada como segundo argumento de plantilla. El mismo encabezado también proporciona el contenedor std::multiset
que puede almacenar los valores múltiples sin filtrar los duplicados.
Tenga en cuenta que creamos ambos objetos de conjunto con el constructor de la lista de inicializadores en el siguiente ejemplo. También utilizamos la función miembro count
, que recupera el número de elementos que existen en el conjunto con la clave dada. Esta función es más intrínseca al contenedor std::multiset
, pero puede comprobar si el elemento existe con la misma función cuando se invoca desde el objeto std::set
.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
template <typename T>
void printSet(set<T> s) {
for (const auto &item : s) {
cout << item << "; ";
}
cout << endl;
}
template <typename T>
void printMultiSet(multiset<T> s) {
for (const auto &item : s) {
cout << item << "; ";
}
cout << endl;
}
#define STR(num) #num
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
printSet(s1);
std::multiset<int> s2 = {1, 1, 1, 2, 2, 3};
printMultiSet(s2);
std::cout << STR(s2) << " contains " << s2.count(1) << "ones" << endl;
std::cout << STR(s2) << " contains " << s2.count(2) << "twos" << endl;
return EXIT_SUCCESS;
}
Producción :
1; 2; 3;
1; 1; 1; 2; 2; 3;
s2 contains 3 ones
s2 contains 2 twos
Utilice la función miembro insert
para insertar un elemento en un conjunto en C++
La función insert
tiene múltiples sobrecargas, pero utilizamos la versión que toma un solo argumento que representa el elemento que se agregará al conjunto. Esta sobrecarga de insert
devuelve el objeto std::par
del iterador y el bool
.
Este último indica si la inserción se realizó correctamente y, en caso afirmativo, tiene un valor true
. Por otro lado, el iterador apunta al elemento insertado cuando la operación tiene éxito. Si falla, apunta al elemento que impidió la inserción. Tenga en cuenta que la operación de inserción tiene una complejidad logarítmica en el tamaño del contenedor.
#include <cassert>
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
auto ret = s1.insert(5);
assert(*ret.first == 5);
if (ret.second) std::cout << "Inserted!" << endl;
ret = s1.insert(1);
assert(*ret.first == 1);
if (!ret.second) std::cout << "Not inserted!" << endl;
return EXIT_SUCCESS;
}
Producción :
Inserted!
Not inserted!
Utilice la función de miembro find
para recuperar el iterador del elemento con la clave dada en C++
La función find
es otra función miembro útil del contenedor std::set
que puede devolver el iterador al elemento con la clave dada. Si no hay tal elemento en el conjunto, se devuelve el iterador pasado al final; esto ayuda al usuario a verificar que la llamada a la función se haya realizado correctamente.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
auto search = s1.find(2);
if (search != s1.end()) {
cout << "Found " << (*search) << endl;
} else {
cout << "Not found" << endl;
}
return EXIT_SUCCESS;
}
Producción :
Found 2
Utilice la función de miembro contains
para comprobar si el elemento con la clave dada existe en un conjunto en C++
Desde el estándar del lenguaje C++ 20, std::set
proporciona la función miembro, contains
, que es la interfaz más sencilla para comprobar si el elemento con la clave dada existe en el objeto set. La función devuelve el valor booleano para indicar si dicho elemento está presente en el conjunto. La complejidad del tiempo de ejecución de esta función también es logarítmica en el tamaño del contenedor.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s3 = {91, 123, 63, 122, 22, 53};
for (int x : {22, 23, 53, 54}) {
if (s3.contains(x)) {
cout << x << ": Found\n";
} else {
cout << x << ": Not found\n";
}
}
return EXIT_SUCCESS;
}
Producción :
22: Found
23: Not found
53: Found
54: Not found
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook