English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
خريطة C++ emplace()وظيفة تستخدم لـإدراجمكون جديد يستخدم لتمديد حاوية الخريطة. يتم بناء العنصر مباشرة (لا يتم نسخه ولا تحريكه).
من خلال استدعاء بناء العنصر للعناصر التي يتم تمريرها إلى هذه الوظيفة. يتم إدراج العنصر فقط إذا لم يكن المفتاح موجودًا.
template<class...Args> pair<iterator, bool> emplace(Args&&... args); // من C++ 11
المعاملات: توزيع لتكوين المعاملات التي سيتم إدراجها في الخريطة.
هويستخدم زوج بولياني ليعكس ما إذا تم إدراج العنصر، ويستعيد ملفًا للمرجع إلى العنصر المدرج.
دعونا نرى مثال بسيط على إدراج العناصر في الخريطة.
#include <iostream> #include <map> using namespace std; int main(void) { map<char, int> m; m.emplace('a', 1); m.emplace('b', 2); m.emplace('c', 3); m.emplace('d', 4); m.emplace('e', 5); cout << "الخريطة تحتوي على العناصر التالية" << endl; for (auto it = m.begin(); it != m.end(); ++it) cout << it->first << " = " << it->second << endl; إرجاع 0; }
الإخراج:
الخريطة تحتوي على العناصر التالية a = 1 b = 2 c = 3 d = 4 e = 5
في المثال السابق، تم إدراج عنصر يحتوي على زوج المفتاح القيمة في حاوية map m.
دعونا نرى مثالاً بسيطاً، حيث يتم إدراج العناصر ومراقبة المفتاح المكرر.
#include <map> #include <string> #include <iostream> #include <string> using namespace std; template<typename M> void print(const M& m) { cout << m.size() << " عناصر: "; for (const auto& p : m) { cout << "( " << p.first << ", " << p.second << ") "; } cout << endl; } int main() { map<int, string> m1; auto ret = m1.emplace(10, "ten"); ret = m1.emplace(20, "twenty"); ret = m1.emplace(30, "thirty"); if (!ret.second){ auto pr = *ret.first; cout << "فشل إدراج Element، العنصر المرتبط بالمفتاح 10 موجود بالفعل." << endl << "العناصر الموجودة هي (" << pr.first << ", " << pr.second << ")" << endl; cout << "لم يتم تعديل map" << endl; } else{ cout << "map تم تعديله، العناصر الجديدة \n"; print(m1); } cout << endl; ret = m1.emplace(10, "one zero"); if (!ret.second){ auto pr = *ret.first; cout << "فشل إدراج Element، العنصر المرتبط بالمفتاح 10 موجود بالفعل." << endl << "العناصر الحالية هي (" << pr.first << ", " << pr.second << ")" << endl; } else{ cout << "map تم تعديله، العناصر الجديدة"; print(m1); } cout << endl; }
الإخراج:
تم تعديل map، العناصر الجديدة 3 عناصر: (10, ten) (20, twenty) (30, thirty) فشل إدراج Element، العنصر المرتبط بالمفتاح 10 موجود بالفعل. العناصر الحالية هي (10, ten)
في المثال السابق، تم إدراج العناصر في map، وعند محاولة استخدام المفتاح نفسه 10، سيتم عرض رسالة خطأ تشير إلى أن المفتاح 10 موجود بالفعل.
دعونا نرى مثالاً بسيطاً، حيث يتم إدراج العناصر في map من خلال نقل معطيات البناء إلى المفتاح والقيمة.
#include <iostream> #include <utility> #include <string> using namespace std; #include <map> int main() { map<string, string> m; //استخدام بناء الجسم move m.emplace(make_pair(string("a"), string("a")));} //استخدام بناء move constructor للpair m.emplace(make_pair("b", "abcd")); //استخدام بناء template pair m.emplace("d", "ddd"); //استخدام بناء قطاع pair m.emplace(piecewise_construct, forward_as_tuple("c"), forward_as_tuple(10, 'c')); for (const auto &p : m) { cout << p.first << " => " << p.second << '\n'; } }
الإخراج:
a => a b => abcd c => ccccccccc d => ddd
في المثال السابق، تم إدراج العناصر في map من خلال تمرير معلمات بناء الكائن إلى الكلمات المفتاحية والقيم.
لنرى مثالاً بسيطاً على إدراج العناصر.
#include <iostream> #include <map> #include <string> using namespace std; int main() { typedef map<string, int> city; string name; int age; city fmly; int n; cout << "输入家庭成员人数 :"; cin >> n; cout << "输入每个成员的姓名和年龄: \n"; for(int i = 0; i<n; i++) { cin >> name; cin >> age; //fmly[name] = age; fmly.emplace(name, age); } cout << "\n家庭总成员是:" << fmly.size(); cout << "\n家庭成员的详细信息: \n"; cout << "\nName | Age \n ________________________ \n"; city::iterator p; for(p = fmly.begin(); p!=fmly.end(); p++) { cout << (*p).first << " | " << (*p).second << " \n "; } إرجاع 0; }
الإخراج:
أدخل عدد أفراد العائلة: 3 أدخل اسم كل عضو من أفراد العائلة و العمر: Ram 42 Sita 37 Laxman 40 عدد أفراد العائلة:3 تفاصيل أفراد العائلة: الاسم | العمر __________________________ Laxman | 40 Ram | 42 Sita | 37
في المثال السابق، يتم إدراج العنصر فقط بناءً على اختيار المستخدم.