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; }
الخروج:
集合包含以下元素 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("ten"); if (!ret.second){ cout << "Emplace失败,值为“ten”的元素已经存在。" << endl << " 现有元素是 (" << *ret.first << ")" << endl; cout << "set没有被修改" << endl; } else{ cout << "تم تعديل المجموعة، والآن تحتوي على \"; print(s1); } cout << endl; ret = s1.emplace("ten"); if (!ret.second){ cout << "Emplace失败,值为“ten”的元素已经存在。" << endl << " 现有元素是 (" << *ret.first << ")" << endl; } else{ cout << "تم تعديل المجموعة، والآن تحتوي على \"; print(s1); } cout << endl; }
الخروج:
تم تعديل المجموعة، والآن تحتوي على 1 عنصر: (ten) فشل emplace، العنصر ذو القيمة "ten" موجود بالفعل. العناصر الموجودة هي: (ten)
في المثال السابق، تم إدخال العناصر إلى المجموعة، وعند محاولة استخدام المفتاح نفسه "ten"، سيظهر رسالة خطأ تقول إن المفتاح "ten" موجود بالفعل.
لنرى مثالاً بسيطاً لبحث عن مجموع العناصر المضمنة:
#include <iostream> #include <set> using namespace std; int main() { // إعلان متغير sum int sum = 0; // إعلان 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); // إعلان iterator set<int>::iterator it; // حساب مجموع العناصر while (!myset.empty()) { it = myset.begin(); sum = sum + *it; myset.erase(it); } // طباعة مجموع cout << "مجموع العناصر هو: \" << sum; return 0; }
الخروج:
مجموع العناصر هو: 30
لنرى مثالاً بسيطاً ل插入 العناصر:
#include <iostream> #include <set> #include <string> using namespace std; int main() { typedef set<string> city; string name; city fmly; int n; cout << "ادخل عدد أفراد الأسرة:\"; cin >> n; cout << "ادخل اسم كل عضو:\n"; for(int i = 0; i < n; i++) { cin >> name; // الحصول على المفتاح fmly.emplace(name); } cout << "\nعدد أفراد الأسرة الكلية:\ cout << "\nقائمة أفراد الأسرة: \n"; cout << "\nاسم\n_______\n"; city::iterator p; for(p = fmly.begin(); p!=fmly.end(); p++) { cout << (*p) << " \n "; } return 0; }
الخروج:
أدخل عدد أفراد العائلة: 3 أدخل اسم كل عضو من أفراد العائلة: Bob Robin David عدد أفراد العائلة: 3 قائمة أفراد العائلة: الاسم ________________________ Bob David Robin
في الأمثلة أعلاه، يتم إدراج العناصر فقط بناءً على اختيار المستخدم.