在C++ STL中的unordered_multiset insert()函数

在C++ STL中的unordered_multiset insert()函数

unordered_multiset是C++ STL中的一个容器,它可以存储一组无序的元素。在插入元素时,它提供了insert()函数。本文将着重讲解unordered_multiset的insert()函数。

基本语法

unordered_multiset中的insert()函数有多个重载版本,这里主要讲解两个常用版本的基本语法。

insert(const value_type& val)

第一个版本的insert()函数带有一个参数,用于将元素val插入到unordered_multiset中。

#include <iostream>
#include <unordered_set>

int main()
{
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    myset.insert(4);

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4
    return 0;
}

这个例子中,unordered_multiset初始化了一个包含1,2,2,3,3,3这6个元素的集合。然后,使用insert()函数将4插入到集合中,并使用for循环打印输出集合中的所有元素。结果显示,集合中元素的顺序被打乱并去重了:1 2 3 4。

insert(InputIterator first, InputIterator last)

第二个版本的insert()函数带有两个参数,用于将[first, last)范围内的所有元素插入到unordered_multiset中。

#include <iostream>
#include <vector>
#include <unordered_set>

int main()
{
    std::vector<int> myvec = {4, 5, 5, 6, 6, 6};
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    myset.insert(myvec.begin(), myvec.end());

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4 5 6
    return 0;
}

这个例子中,定义了一个vector myvec和一个unordered_multiset myset,并将它们初始化为{4, 5, 5, 6, 6, 6}和{1, 2, 2, 3, 3, 3}。然后,使用insert()函数将myvec中的所有元素插入到myset中,并使用for循环打印输出myset中的所有元素。结果显示,myset中的元素被打乱并去重了:1 2 3 4 5 6。

示例代码

案例1:插入元素

unordered_multiset可以很方便地插入一个元素,在insert函数中只需简单地传递元素值即可。以下代码演示了如何在向unordered_multiset中插入元素:

#include <iostream>
#include <unordered_set>

int main()
{
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    myset.insert(4);

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4
    return 0;
}

案例2:插入多个元素

在unordered_multiset中,可以使用insert函数插入多个元素。

#include <iostream>
#include <vector>
#include <unordered_set>

int main()
{
    std::vector<int> myvec = {4, 5, 5, 6, 6, 6};
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    myset.insert(myvec.begin(), myvec.end());

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 23 4 5 6
    return 0;
}

案例3:使用插入器插入元素

C++11之前,向容器中插入值只能使用insert函数,需要手动创建一个值然后传递到insert函数中。但是从C++11开始,我们可以使用插入器对元素进行插入、移动或分配,插入器是一个类似于类的结构。在以下代码中,我们将插入器插入两个值并将结果打印出来。

#include <iostream>
#include <unordered_set>

int main()
{
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    struct IntHasher // 插入器
    {
        std::size_t operator()(const int& val) const
        {
            return std::hash<int>()(val);
        }
    };

    auto result = myset.emplace_hint(myset.begin(), 4);   // emplace_hint接受指针参数
    myset.insert( result, 5 );

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4 5
    return 0;
}

案例4:使用迭代器插入元素

在许多情况下,插入值会受到数据结构的限制,并且可能会导致缩小容器。在这种情况下,迭代器可以用于指示函数在相应位置进行插入。 您可以使用insert或emplace函数的原始形式,也可以使用emplace_hint。 在以下代码示例中,您可以看到emplace_hint正在插入值。

#include <iostream>
#include <unordered_set>

int main()
{
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};

    auto result = myset.emplace_hint(myset.begin(), 4);
    myset.insert( result, 5 );

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4 5
    return 0;
}

案例5:使用initializer_list插入元素

Initializer_list在C++中可以直接使用”{}”进行声明,可以将列表分配给变量或参数列表。 unordered_multiset容器支持使用{}插入值。在以下代码示例中,我们可以看到容器中插入了五个值:

#include <iostream>
#include <unordered_set>

int main()
{
    std::unordered_multiset<int> myset = {1, 2, 2, 3, 3, 3};
    myset.insert({4, 5, 5, 6, 6, 6});

    for(int i : myset)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;//1 2 3 4 5 6
    return 0;
}

结论

unordered_multiset是一个十分实用的C++ STL容器,它提供了方便易用的insert()函数,可以让用户在插入元素时如鱼得水般自如。在编写代码时,应选择最优的插入方法,以提高程序的效率和正确性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程