📅  最后修改于: 2023-12-03 14:59:46.930000             🧑  作者: Mango
unordered_multiset是C++ STL中提供的一种容器,它可以存储一组不唯一的、无序的元素。而emplace()函数,在unordered_multiset中则是用来将元素插入到容器中的一种方法。
emplace()函数的定义如下:
template< class... Args >
iterator emplace( Args&&... args );
它可以接受多个参数,这些参数将会被整合成一个元素并插入到unordered_multiset中。返回的是一个iterator,指向插入的元素所在的位置。
emplace()函数的参数应当与unordered_multiset中元素的类型相匹配。对于每个emplace()的调用,参数都将被传递到元素类型的构造函数中。
比如,如果unordered_multiset中存储的是int类型的元素,则emplace()函数的参数也应当是int类型的。如果unordered_multiset中存储的是struct类型的元素,则emplace()函数的参数需要与struct类型的构造函数相匹配。
下面是一个简单的示例代码,展示了如何使用emplace()函数往unordered_multiset添加元素:
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<int> my_set = {1, 2, 3};
auto it = my_set.emplace(4);
for (auto i : my_set) {
std::cout << i << " ";
}
std::cout << std::endl;
my_set.emplace(2);
my_set.emplace(2);
my_set.emplace(2);
for (auto i : my_set) {
std::cout << i << " ";
}
std::cout << std::endl;
std::cout << "inserted element: " << *it << std::endl;
return 0;
}
首先,我们创建了一个unordered_multiset并把1、2、3插入其中。然后,我们使用emplace()函数在末尾添加了一个新元素4,并通过auto关键字得到了指向该元素位置的iterator。
接下来,我们修改my_set,添加了3个值为2的元素。最后打印出my_set中的所有元素,并输出了向my_set插入的第一个元素4的值。
结果如下:
1 2 3 4
1 2 2 2 3 4
inserted element: 4
需要注意的是,emplace()函数并不能保证unordered_multiset中的所有元素都是唯一的。虽然该函数可以往容器中添加新元素,但它并不会判断容器中是否已经存在相同的元素。
如果需要保证元素的唯一性,可以使用unordered_set容器。如果需要排序元素,可以使用set容器。
通过本文的介绍,我们了解到了在C++ STL中,如何使用emplace()函数往unordered_multiset容器中添加新元素,以及该函数的参数传递规则和注意事项。希望这篇文章能够帮助到程序员更好地理解unordered_multiset的使用。