在C++ STL中unordered_multiset::emplace()函数

在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在何处插入新元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程