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

📅  最后修改于: 2023-12-03 15:29:51.118000             🧑  作者: Mango

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

unordered_multiset 是 C++ STL 库中的一个容器,它是个无序多重集合(元素可以重复出现,同时也不会被排序),在它的 API 中,提供了多个插入元素的函数,其中有一个是 insert()

函数原型
template <typename... Args>
iterator insert(Args&&... args);
描述

插入一个元素到 unordered_multiset 容器中,如果元素已经存在,则会直接被添加到当前的桶中,并返回一个指向新元素的迭代器,如果元素不存在,则会新建一个桶,再将元素添加到因为哈希冲突需要新建的桶中,并返回一个指向新元素的迭代器。

若参数为lvalue,则直接复制对象,若为rvalue则会将对象移动,提高效率。

返回值

返回由指定参数构成的元素(或由 std::forward(args)... 构成),并返回一个指向新元素的迭代器。 如果参数已经存在,则会讲元素添加到当前桶的末尾,并返回一个指向新增元素的迭代器,否则将构造一个新桶,并将元素插入到其中,并返回指向新增元素的迭代器。

代码示例
#include <iostream>
#include <unordered_set>

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

    // 插入一个元素4
    auto it = myset.insert(4);

    // 将元素6插入,提示了另一种使用方式,即使用std::make_pair
    it = myset.insert(std::make_pair(6, 1));

    // 插入元素10个7
    myset.insert({7, 7, 7, 7, 7, 7, 7, 7, 7, 7});

    std::cout << "myset contains:";
    for (auto& x : myset) std::cout << ' ' << x;
    std::cout << '\n';   
}
输出结果
myset contains : 6 1 5 7 7 7 7 7 7 7 7 4 3 2 1
总结

insert() 方法可以帮助我们在 unordered_multiset 容器中,快速高效地添加元素,可以同时添加多个相同(或不同)的元素。在使用时可以注意到 pass-by-value 能够有效的提高效率。除此外,还有其他一些插入元素的函数,例如 emplace()try_emplace() 等,使用时可以根据实际场景进行选择。