English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 教程基础

C++ Contrôle de flux

C++ Fonction

C++ Tableau & chaîne

C++ Structure de données

C++ Classe & objet

C++ Pointeur

C++ Héritage

C++ STL tutoriel

C++ 参考手册

C++ set emplace() 使用方法及示例

C++ Set (ensemble) STL

C ++ set emplace()函数用于通过将新元素插入容器来扩展set容器。元素是直接构建的(既不复制也不移动)。

通过给传递给该函数的参数args调用元素的构造函数。

仅当键不存在时才进行插入。

语法

template<class.... Args>
    pair<iterator, bool> emplace (Args&&... args);    //C++ 11 之后

参数

args:传递来构造要插入到集合中的元素的参数。

返回值

emplace()函数返回一个布尔对,它将指示是否发生了插入,并返回一个指向新插入元素的迭代器。

复杂

容器大小的对数。

迭代器有效性

没有变化。

数据争用

容器已修改。

尽管同时访问出口元素是安全的,但在容器中进行迭代范围并不安全。

异常安全

如果引发异常,则容器中没有任何更改。

Exemple1

让我们看一下将元素插入到集合中的简单示例:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   
   set<char> m;
   m.emplace('a');
   m.emplace('b');
   m.emplace('c');
   m.emplace('d');
   m.emplace('e');
   cout << "集合包含以下元素" << endl;
   for (auto it = m.begin(); it != m.end(); ++it)
      cout << *it << ", ";
   return 0;
}

Sortie :

集合包含以下元素
a, b, c, d, e,

在上面的示例中,它只是将具有给定键值对的元素插入到集合m中。

Exemple2

让我们看一个简单的实例,插入元素并检查重复键:

#include <set>  
#include <string>  
#include <iostream>  
  
using namespace std;  
  
template<typename S> void print(const S& s) {  
    cout << s.size() << " 元素: ";  
  
    for (const auto& p : s) {  
        cout << "(" << p << ") ";  
    }  
  
    cout << endl;  
}  
  
int main()  
{  
    set<string> s1;  
  
    auto ret = s1.emplace("dix");  
  
    if (!ret.second){  
        cout << "Échec de l'emplace, l'élément de valeur "dix" existe déjà."  
            << endl << "   Les éléments existants sont (" << *ret.first << ")"  
            << endl;  
        cout << "set没有被修改" << endl;  
    }  
    else{  
        cout << "L'ensemble a été modifié, il contient maintenant ";  
        print(s1);  
    }  
    cout << endl;  
  
    ret = s1.emplace("dix");  
  
    if (!ret.second){  
        cout << "Échec de l'emplace, l'élément de valeur "dix" existe déjà."  
            << endl << "   Les éléments existants sont (" << *ret.first << ")"  
            << endl;  
    }  
    else{  
        cout << "L'ensemble a été modifié, il contient maintenant ";  
        print(s1);  
    }  
    cout << endl;  
}

Sortie :

L'ensemble a été modifié, il contient maintenant 1 Élément : (dix)
Échec de l'emplace, l'élément de valeur "dix" existe déjà.
  Les éléments existants sont (dix)

Dans l'exemple ci-dessus, lorsque vous essayez d'insérer un élément dans le ensemble en utilisant la clé "dix", il affiche un message d'erreur indiquant que la clé "dix" existe déjà.

Exemple3

Laissez-nous voir un exemple simple, recherchez la somme des éléments insérés :

#include <iostream>
#include <set>
using namespace std;
 
int main()
{
    // Déclaration de la variable sum
    int sum = 0;
 
    // Déclaration de set
    set<int> myset{};
    myset.emplace(1);
    myset.emplace(7);
    myset.emplace(4);
    myset.emplace(8);
    myset.emplace(2);
    myset.emplace(5);
    myset.emplace(3);
 
    // Déclaration d'iterator
    set<int>::iterator it;
 
    // Calculer la somme des éléments
    while (!myset.empty()) {
        it = myset.begin();
        sum = sum + *it;
        myset.erase(it);
    }
 
    // Imprimer la somme
    cout << "La somme des éléments est : " << sum;
    return 0;
}

Sortie :

La somme des éléments est : 30

Exemple4

Laissez-nous voir un exemple simple d'insertion d'éléments :

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
  typedef set<string> city;  
   string name;
   city fmly;
   int n;
   cout << "\nEntrez le nombre de membres de la famille: ";
   cin >> n;
   cout << "\nEntrez le nom de chaque membre: \n";
   for(int i = 0; i < n;++)
   {
       cin >> name;      // Obtenir la clé
       fmly.emplace(name);
       
   }
   
      cout << "\nLe nombre total des membres de la famille est:" << fmly.size();
      cout << "\nListe des membres de la famille: \n";
      cout << "\nNom \n ________________________\n";
      city::iterator p;
      for(p = fmly.begin(); p!=fmly.end(); p++)
      {
          cout<<(*p <<= "\n\t";
      }
    
   return 0;
}

Sortie :

Entrez le nombre de membres de la famille: 3
Entrez le nom de chaque membre: 
Bob
Robin
David
Le nombre total de membres de la famille est: 3
Liste des membres de la famille: 
Nom 
 ________________________
Bob 
David 
Robin

Dans l'exemple ci-dessus, il insère simplement des éléments en fonction du choix de l'utilisateur.

C++ Set (ensemble) STL