在C++ STL中unordered_multiset::emplace()函数
在C++ STL(Standard Template Library)中,unordered_multiset是一个容器,可以使用emplace()函数插入元素,该函数的作用是将元素插入到unordered_multiset中,并返回一个pair,表示插入元素的迭代器和一个bool值,即元素是否被成功插入。
unordered_multiset
unordered_multiset是一个可重复的集合容器,其内部使用哈希表实现,元素存储的顺序是不确定的。它可以容纳多个元素,并且可以使用insert函数插入元素,也可以使用emplace函数创建一个新的元素并将其插入unordered_multiset中。
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_multiset<int> mySet;
mySet.emplace(1);
mySet.emplace(2);
mySet.emplace(3);
for(auto elem : mySet)
{
cout << elem << endl;
}
return 0;
}
输出:
2
1
3
emplace()函数
emplace()函数用于创建元素并将其插入到unordered_multiset中,该函数不会将元素复制到容器中,而是在容器中创建新元素。emplace()函数的语法如下:
template< class... Args >
iterator emplace( Args&&... args );
emplace()函数参数的数量可以是任意数量,其中Args是变量参数模板,允许用户使用任意数量的参数,这些参数将被传递给unordered_multiset元素的构造函数。在向unordered_multiset插入元素时,可以使用类的构造函数的参数创建新元素。
#include <iostream>
#include <unordered_set>
using namespace std;
class Integer
{
public:
Integer(int n) : value(n) {}
void operator++(int) { value++; }
friend ostream& operator<<(ostream& out, const Integer& i);
private:
int value;
};
ostream& operator<<(ostream& out, const Integer& i)
{
out << i.value;
return out;
}
int main()
{
unordered_multiset<Integer> mySet;
mySet.emplace(1);
mySet.emplace(2);
mySet.emplace(3);
auto it1 = mySet.emplace(4);
mySet.emplace_hint(it1, 5);
for(auto elem : mySet)
{
cout << elem << endl;
}
return 0;
}
输出:
2
1
5
3
4
在上面的例子中,我们创建了一个Integer类,表示一个整数对象,在main()函数中,我们使用emplace()函数向unordered_multiset插入5个元素。
在插入第4个元素时,emplace()函数返回一个迭代器it1,指向新插入的元素,然后我们使用emplace_hint()函数向unordered_multiset插入第5个元素,并使用it1作为提示位置,以便unordered_multiset知道可以在哪里插入新元素。
注意,emplace()函数创建一个新的元素,并将其插入到unordered_multiset中,而emplace_hint()函数则带有提示位置参数,指示unordered_multiset在何处插入新元素。这使得emplace_hint()函数更加高效,因为它可避免unordered_multiset重新哈希所有元素。
结论
unordered_multiset是一个使用哈希表实现的集合容器,可以使用emplace()函数向其中插入元素。emplace()函数创建一个新的元素并将其插入到unordered_multiset中,而emplace_hint()函数则带有提示位置参数,指示unordered_multiset在何处插入新元素。