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

تعليمية C++ الأساسية

تحكم في العملية C++

وظيفة مخصصة C++

مجموعات C++ و سلاسل

هياكل بيانات C++

مفاهيم C++ و أجهزة

المؤشرات C++

الاستنساخ C++

تعليمية STL C++

دليل C++

استخدام وظيفة C++ map emplace() و مثال

map STL C++ (المسح)

خريطة C++ emplace()وظيفة تستخدم لـإدراجمكون جديد يستخدم لتمديد حاوية الخريطة. يتم بناء العنصر مباشرة (لا يتم نسخه ولا تحريكه).

من خلال استدعاء بناء العنصر للعناصر التي يتم تمريرها إلى هذه الوظيفة. يتم إدراج العنصر فقط إذا لم يكن المفتاح موجودًا.

النحو

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

المعاملات

المعاملات: توزيع لتكوين المعاملات التي سيتم إدراجها في الخريطة.

القيمة المعدة

هويستخدم زوج بولياني ليعكس ما إذا تم إدراج العنصر، ويستعيد ملفًا للمرجع إلى العنصر المدرج.

مثال 1

دعونا نرى مثال بسيط على إدراج العناصر في الخريطة.

#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.

مثال 2

دعونا نرى مثالاً بسيطاً، حيث يتم إدراج العناصر ومراقبة المفتاح المكرر.

#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 موجود بالفعل.

مثال 3

دعونا نرى مثالاً بسيطاً، حيث يتم إدراج العناصر في 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 من خلال تمرير معلمات بناء الكائن إلى الكلمات المفتاحية والقيم.

مثال 4

لنرى مثالاً بسيطاً على إدراج العناصر.

#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

في المثال السابق، يتم إدراج العنصر فقط بناءً على اختيار المستخدم.

map STL C++ (المسح)