establecer::emplace() en C++ STL

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.

establecer::emplazar()

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *