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

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

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

介绍

在C++ STL中,unordered_set是一个哈希表容器,它与set不同,不同的元素以哈希值来进行存储和访问。而emplace()函数则是该容器中用来插入元素的函数之一,它能够快速地将一个对象插入到unordered_set中,并返回一个指向该元素的迭代器或者一个nullptr。

语法
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );
参数
  • Args&&... args:要插入的元素的构造参数
返回值
  • std::pair<iterator,bool>:一个表示插入操作是否成功的pair对象,其中的first表示被插入元素的迭代器,second表示插入操作是否成功。如果元素已经存在,则不会插入该元素,返回该元素的迭代器。
示例
#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> mySet;

    mySet.emplace(1);
    mySet.emplace(2);
    mySet.emplace(3);

    std::cout << "mySet contains:";
    for (int x : mySet) {
        std::cout << ' ' << x;
    }
    std::cout << '\n';

    auto ret = mySet.emplace(2);
    if (!ret.second) {
        std::cout << "2 is already in the set (with a value of " << *ret.first << ")\n";
    }

    return 0;
}

输出结果:

mySet contains: 3 2 1
2 is already in the set (with a value of 2)
注意事项
  • 插入的元素需要满足unordered_set的要求,即可比较和哈希的。
  • 如果插入的元素在unordered_set中已经存在,则不会插入该元素,并返回该元素的迭代器。
  • 调用emplace()函数时,函数会根据传入的参数选择合适的构造函数进行构造,然后将构造出来的元素插入到unordered_set中。因此,可以使用emplace()函数来避免创建临时对象的开销,从而提高程序的性能。