📜  C++ STL中的unordered_multiset emplace()函数(1)

📅  最后修改于: 2023-12-03 14:59:46.930000             🧑  作者: Mango

C++ STL中的unordered_multiset emplace()函数

unordered_multiset是C++ STL中提供的一种容器,它可以存储一组不唯一的、无序的元素。而emplace()函数,在unordered_multiset中则是用来将元素插入到容器中的一种方法。

emplace()函数的定义

emplace()函数的定义如下:

template< class... Args >
iterator emplace( Args&&... args );

它可以接受多个参数,这些参数将会被整合成一个元素并插入到unordered_multiset中。返回的是一个iterator,指向插入的元素所在的位置。

emplace()函数的用法
参数传递

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的使用。