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

دليل الأساسيات لمجموعة C++

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

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

مجموعات C++ و

مبادئ التركيب البياني C++

كلاس C++ وأوبجكت

المؤشرات لمجموعة C++

الوراثة لمجموعة C++

دليل STL لمجموعة C++

دليل مرجع C++

استخدام C++ set emplace() وامثلة

Set (الجمعيات) لمجموعة C++

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

من خلال استدعاء بناء العنصر للمعامل args المرسل إلى هذه الوظيفة.

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

语法

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

参数

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

返回值

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

复杂

容器大小的对数。

迭代器有效性

没有变化。

数据争用

容器已修改。

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

异常安全

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

实例1

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

#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中。

实例2

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

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

مثال 3

لنرى مثالاً بسيطاً لبحث عن مجموع العناصر المضمنة:

#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

مثال 4

لنرى مثالاً بسيطاً ل插入 العناصر:

#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

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

Set (الجمعيات) لمجموعة C++