一、使用前提
引入头文件:
#include <unordered_set>
二、unordered_set是什么
unordered_set 容器,可直译为“无序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。
unordered_set的几个特性:
- 不再以键值对的形式存储数据,而是直接存储数据的值 ;
- 容器内部存储的各个元素的值都互不相等,且不能被修改;
- 不会对内部存储的数据进行排序
三、unordered_set的初始化
创建空的set
unordered_set set1;
拷贝构造
unordered_set set2(set1);
使用迭代器构造
unordered_set set3(set1.begin(), set1.end());
使用数组作为其初值进行构造
unordered_set set4(arr,arr+5);
移动构造
unordered_set set5(move(set2));
使用处置列表进行构造
unordered_set set6 {1,2,10,10};
示例代码
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
// 创建一个空的unordered_set容器
std::unordered_set<int> uset;
// 给 uset 容器添加数据
uset.emplace(1);
uset.emplace(5);
uset.emplace(7);
uset.emplace(7);
// 查看当前 uset 容器存储元素的个数
cout << "uset size = " << uset.size() << endl;
// 遍历输出 uset 容器存储的所有元素
for (auto iter = uset.begin(); iter != uset.end(); ++iter)
{
cout << *iter << endl;
}
return 0;
}
输出
huifeimao@CN-SHA-0132:~/Desktop/work/c++_project/LeetCode$ g++ unordered_set使用方法.cpp -o main
huifeimao@CN-SHA-0132:~/Desktop/work/c++_project/LeetCode$ ./main
uset size = 3
7
5
1
说明emplace插入数据是插入到开头的。
在C++中,emplace
和emplace_back
是用于在容器中插入元素的成员函数。它们的主要区别取决于容器的类型。
-
emplace
函数用于关联容器和无序容器(如unordered_set
、unordered_map
等)。它接受参数并在容器中构造新的元素,而不需要拷贝或移动操作。这是通过在容器中直接构造元素而不是创建临时对象,然后再将其插入容器中来实现的。这样可以避免不必要的拷贝或移动操作,从而提高性能。
示例代码:
std::unordered_set<int> mySet;
mySet.emplace(42); // 使用 emplace 插入元素
-
emplace_back
函数用于顺序容器(如vector
、deque
等),它只能在容器的尾部插入元素。它也接受参数并在容器中构造新的元素,但与emplace
不同的是,它只能在容器的尾部插入元素,因为顺序容器是按顺序存储元素的。emplace_back
会在容器的末尾就地构造元素,而无需创建临时对象。
示例代码:
std::vector<int> myVector;
myVector.emplace_back(42); // 使用 emplace_back 在容器尾部插入元素
总之,emplace
和emplace_back
函数都是在容器中就地构造新元素的方法。emplace
用于关联容器和无序容器,emplace_back
用于顺序容器,并且只能在尾部插入元素。它们在避免不必要的拷贝或移动操作方面提供了性能上的好处。