Los conjuntos son un tipo de contenedores asociativos en los que cada elemento tiene que ser único, porque el valor del elemento lo identifica. El valor del elemento no se puede modificar una vez que se agrega al conjunto, aunque es posible eliminar y agregar el valor modificado de ese elemento.
Esta función se utiliza para insertar un nuevo elemento en el contenedor del conjunto, solo si el elemento que se va a insertar es único y no existe ya en el conjunto.
Sintaxis:
setname.emplace(value) Parameters : The element to be inserted into the set is passed as the parameter. Result : The parameter is added to the set if the set does not contain that element already.
Ejemplos:
Input : myset{1, 2, 3, 4, 5}; myset.emplace(6); Output : myset = 1, 2, 3, 4, 5, 6 Input : myset{1, 2, 3, 4, 5}; myset.emplace(4); Output : myset = 1, 2, 3, 4, 5
Errores y excepciones
1. Tiene una fuerte garantía de excepción, por lo tanto, no se realizan cambios si se lanza una excepción
2. El parámetro debe ser del mismo tipo que el del contenedor, de lo contrario, se lanza un error
// INTEGER SET EXAMPLE // CPP program to illustrate // Implementation of emplace() function #include <iostream> #include <set> using namespace std; int main() { set<int> myset{}; myset.emplace(2); myset.emplace(6); myset.emplace(8); myset.emplace(9); myset.emplace(0); // set becomes 0, 2, 6, 8, 9 // adding unique element myset.emplace(5); // set becomes 0, 2, 5, 6, 8, 9 // adding element which already // exists there will be no // change in the set myset.emplace(2); // set remains 0, 2, 5, 6, 8, 9 // printing the set for (auto it = myset.begin(); it != myset.end(); ++it) cout << ' ' << *it; return 0; }
Producción:
0 2 5 6 8 9
// STRING SET EXAMPLE // CPP program to illustrate // Implementation of emplace() function #include <iostream> #include <set> #include <string> using namespace std; int main() { set<string> myset{}; myset.emplace("This"); myset.emplace("is"); myset.emplace("a"); myset.emplace("computer science"); myset.emplace("portal"); // set becomes This, a, computer // science, is, portal // adding unique element myset.emplace("GeeksForGeeks"); // set becomes GeeksForGeeks, This, is, // a, computer science, portal // adding element which already exists // there will be no change in the set myset.emplace("is"); // set remains GeeksForGeeks, This, is, // a, computer science, portal // printing the set for (auto it = myset.begin(); it != myset.end(); ++it) cout << ' ' << *it; return 0; }
Producción:
GeeksForGeeks This a computer science is portal
Complejidad de tiempo: O (logn)
Aplicación
Ingrese un multiconjunto vacío con los siguientes números y ordénelos usando la función emplace() y encuentre la suma de los elementos.
Input : 7, 9, 4, 6, 2, 5, 3 Output : 36
// CPP program to illustrate // Application of emplace() function #include <iostream> #include <set> using namespace std; int main() { // sum variable declaration int sum = 0; // set declaration set<int> myset{}; myset.emplace(7); myset.emplace(9); myset.emplace(4); myset.emplace(6); myset.emplace(2); myset.emplace(5); myset.emplace(3); // iterator declaration set<int>::iterator it; // finding sum of elements while (!myset.empty()) { it = myset.begin(); sum = sum + *it; myset.erase(it); } // printing the sum cout << sum; return 0; }
Producción :
36
emplace() vs insert
Cuando usamos insert, creamos un objeto y luego lo insertamos en el conjunto múltiple. Con emplace(), el objeto se construye en el lugar.
// C++ code to demonstrate difference between // emplace and insert #include<bits/stdc++.h> using namespace std; int main() { // declaring set set<pair<char, int>> ms; // using emplace() to insert pair in-place ms.emplace('a', 24); // Below line would not compile // ms.insert('b', 25); // using emplace() to insert pair in-place ms.insert(make_pair('b', 25)); // printing the set for (auto it = ms.begin(); it != ms.end(); ++it) cout << " " << (*it).first << " " << (*it).second << endl; return 0; }
Producción :
a 24 b 25
Publicación traducida automáticamente
Artículo escrito por AyushSaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA