English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set emplace()函数用于通过将新元素插入容器来扩展set容器。元素是直接构建的(既不复制也不移动)。
通过给传递给该函数的参数args调用元素的构造函数。
仅当键不存在时才进行插入。
template<class.... Args> pair<iterator, bool> emplace (Args&&... args); //C++ 11 之后
args:传递来构造要插入到集合中的元素的参数。
emplace()函数返回一个布尔对,它将指示是否发生了插入,并返回一个指向新插入元素的迭代器。
容器大小的对数。
没有变化。
容器已修改。
尽管同时访问出口元素是安全的,但在容器中进行迭代范围并不安全。
如果引发异常,则容器中没有任何更改。
让我们看一下将元素插入到集合中的简单示例:
#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中。
让我们看一个简单的实例,插入元素并检查重复键:
#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à.
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
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.