📅  最后修改于: 2023-12-03 15:13:56.914000             🧑  作者: Mango
unordered_set是STL中的一个常用容器,是一个元素唯一、无序的集合。在unordered_set中,各个元素的位置是通过哈希函数计算得到的,因此unordered_set的查找、插入、删除等操作的时间复杂度都是常数级别的。
unordered_set除了支持常规的迭代器操作、大小操作、查找操作、插入操作、删除操作等,还有自带的各种运算符操作,包括比较运算符、集合运算符等。
本篇介绍unordered_set运算符的用法及示例。
unordered_set的运算符操作主要有以下几种:
这些运算符都可以直接用于unordered_set对象,也可以用于unordered_set对象和另一个容器对象之间的运算。
比较运算符用于判断两个unordered_set对象是否相等。
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> set1 {1, 2, 3, 4};
std::unordered_set<int> set2 {1, 2, 3, 5};
std::unordered_set<int> set3 {1, 2, 3, 4};
std::cout << "Set1 == Set2 : " << (set1 == set2) << std::endl; // false
std::cout << "Set1 == Set3 : " << (set1 == set3) << std::endl; // true
return 0;
}
说明:
通过比较运算符==可以判断两个unordered_set对象是否相等,其返回值为bool类型。
运行结果:
Set1 == Set2 : 0
Set1 == Set3 : 1
集合运算符用于对unordered_set对象进行集合运算,包括差集、交集、并集。
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> set1 {1, 2, 3, 4};
std::unordered_set<int> set2 {3, 4, 5, 6};
std::unordered_set<int> result;
std::set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(result, result.begin()));
std::cout << "Set1 : ";
for (auto it = set1.begin(); it != set1.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Set2 : ";
for (auto it = set2.begin(); it != set2.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Result : ";
for (auto it = result.begin(); it != result.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
说明:
使用std::set_union函数,将set1和set2的并集存放到result中。
运行结果:
Set1 : 1 2 3 4
Set2 : 3 4 5 6
Result : 1 2 3 4 5 6
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> set1 {1, 2, 3, 4};
std::unordered_set<int> set2 {3, 4, 5, 6};
std::unordered_set<int> result;
std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(result, result.begin()));
std::cout << "Set1 : ";
for (auto it = set1.begin(); it != set1.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Set2 : ";
for (auto it = set2.begin(); it != set2.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Result : ";
for (auto it = result.begin(); it != result.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
说明:
使用std::set_intersection函数,将set1和set2的交集存放到result中。
运行结果:
Set1 : 1 2 3 4
Set2 : 3 4 5 6
Result : 3 4
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> set1 {1, 2, 3, 4};
std::unordered_set<int> set2 {3, 4, 5, 6};
std::unordered_set<int> result;
std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(result, result.begin()));
std::cout << "Set1 : ";
for (auto it = set1.begin(); it != set1.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Set2 : ";
for (auto it = set2.begin(); it != set2.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
std::cout << "Result : ";
for (auto it = result.begin(); it != result.end(); it++) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
说明:
使用std::set_difference函数,将set1和set2的差集存放到result中。
运行结果:
Set1 : 1 2 3 4
Set2 : 3 4 5 6
Result : 1 2
unordered_set是STL中常用的容器之一,提供了丰富的运算符操作,包括比较运算符、集合运算符等。
在使用unordered_set时,要注意其元素的唯一性以及无序性,尽可能使用哈希函数,以提高性能。同时,要熟练掌握unordered_set的各种运算符操作,以方便开发。