多重集是类似于set的一种关联容器,不同之处在于多个元素可以具有相同的值。
multiset :: emplace()
此函数用于将新元素插入到多集容器中。
句法 :
multisetname.emplace(value)
Parameters :
The element to be inserted into the multiset
is passed as the parameter.
Result :
The parameter is added to the multiset.
例子:
Input : mymultiset{1, 2, 3, 4, 5};
mymultiset.emplace(6);
Output : mymultiset = 1, 2, 3, 4, 5, 6
Input : mymultiset{};
mymultiset.emplace("This");
mymultiset.emplace("is");
mymultiset.emplace("Geeksforgeeks");
Output : mymultiset = Geeksforgeeks, This, is
错误和异常
1.它具有强大的异常保证,因此,如果引发异常,则不会进行任何更改
2.参数应与容器的类型相同,否则将引发错误
// INTEGER EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include
#include
using namespace std;
int main()
{
multiset mymultiset{};
mymultiset.emplace(1);
mymultiset.emplace(56);
mymultiset.emplace(4);
mymultiset.emplace(9);
mymultiset.emplace(0);
// multi set becomes 0, 1, 4, 9, 56
// adding another element
mymultiset.emplace(87);
// printing the multiset
for (auto it = mymultiset.begin();
it != mymultiset.end(); ++it)
cout << ' ' << *it;
return 0;
}
输出:
0 1 4 9 56 87
// STRING EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include
#include
#include
using namespace std;
int main()
{
multiset mymultiset{};
mymultiset.emplace("This");
mymultiset.emplace("is");
mymultiset.emplace("a");
mymultiset.emplace("computer science");
mymultiset.emplace("portal");
// multi set becomes This, a,
// computer science, is, portal
// adding element
mymultiset.emplace("GeeksForGeeks");
// printing the multiset
for (auto it = mymultiset.begin();
it != mymultiset.end(); ++it)
cout << ' ' << *it;
return 0;
}
输出:
GeeksForGeeks This a computer science is portal
应用
使用emplace()函数输入一个具有以下数字和顺序的空多重集,然后找到元素的总和。与插入相比,emplace()的优点在于,它避免了不必要的对象复制。
Input : 7, 9, 4, 6, 2, 5, 3
Output : 36
// CPP program to illustrate
// Application of emplace() function
#include
#include
using namespace std;
int main()
{
// sum variable declaration
int sum = 0;
// multiset declaration
multiset mymultiset{};
mymultiset.emplace(7);
mymultiset.emplace(9);
mymultiset.emplace(4);
mymultiset.emplace(6);
mymultiset.emplace(2);
mymultiset.emplace(5);
mymultiset.emplace(3);
// iterator declaration
set::iterator it;
// finding sum of elements
while (!mymultiset.empty()) {
it = mymultiset.begin();
sum = sum + *it;
mymultiset.erase(it);
}
// printing the sum
cout << sum;
return 0;
}
输出 :
36
时间复杂度: O(logn)
emplace()与insert()
当使用insert时,我们创建一个对象,然后将其插入到多集合中。使用emplace(),可就地构建对象。
// C++ code to demonstrate difference between
// emplace and insert
#include
using namespace std;
int main()
{
// declaring multiset of pairs
multiset> ms;
// using emplace() to insert pair in-place
ms.emplace('a', 24);
// Below line would not compile
// ms.insert('b', 25);
// using insert() to insert pair in-place
ms.insert(make_pair('b', 25));
// printing the multiset
for (auto it = ms.begin(); it != ms.end(); ++it)
cout << " " << (*it).first << " "
<< (*it).second << endl;
return 0;
}
输出 :
a 24
b 25
有关详细信息,请参阅在std :: map中插入元素(insert,emplace和运算符 [])。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。