C++ STL中的无序集合运算符
在C++ STL中,unordered_set提供了两个运算符,它们分别是:
语法:
1. (unordered_set &lhs **==** unordered_set &rhs)
2. (unordered_set &lhs **!=** unordered_set &rhs)
下面详细讨论这些运算符:
C++ STL中的unordered_set 运算符
‘‘ 是C++ STL中一个操作符,用于在两个无序集合之间执行相等比较操作, unordered_set :: operator 是相应的操作符函数。
语法:
(unordered_set &uset1 == unordered_set &uset2)
参数: 此操作符函数接受两个无序集的引用 uset1 和 uset2 作为参数进行比较。
返回值: 此方法在比较两个集合后返回布尔结果值。比较过程如下:
- 首先比较它们的大小。
- 然后查找ust1中的每个元素是否在ust2中。
如果两个条件都满足, true 值将返回,并且如果在任何时候条件不满足, false 值将返回。
下面程序说明了C++中unordered_set :: operator 。
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
//初始化三个无序集合
unordered_set<int>
sample1 = { 10, 20, 30, 40, 50 };
unordered_set<int>
sample2 = { 10, 30, 50, 40, 20 };
unordered_set<int>
sample3 = { 10, 20, 30, 50, 60 };
//比较sample1和sample2
if (sample1 == sample2) {
cout << "sample1 and "
<< "sample2 are equal."
<< endl;
}
else {
cout << "sample1 and "
<< "sample2 are not equal."
<< endl;
}
//比较sample2和sample3
if (sample2 == sample3) {
cout << "sample2 and "
<< "sample3 are equal."
<< endl;
}
else {
cout << "sample2 and "
<< "sample3 are not equal."
<< endl;
}
return 0;
}
输出:
sample1 and sample2是相等的。
sample2和sample3不相等。
C++ STL中的unordered_set!=运算符
!= 是C++ STL中的一个关系运算符,用于比较无序集合之间的相等和不相等。比较过程如下:
- 首先比较它们的大小。
- 然后在其中一个容器中查找每个元素是否在另一个中存在。
语法:
unordered_set1 != unordered_set2
参数: 该方法接受两个无序集合作为参数 unordered_set1 和 unordered_set2 以检查它们是否相等。
返回值: 该方法返回
- true: 如果操作符左侧和右侧的无序集合相等,则返回。
- false: 如果操作符左侧和右侧的无序集合不相等,则返回。
下面的例子说明了!=运算符:
示例:
// C++程序演示了unordered_set操作符!=
#include <cstring>
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string>
a = { "C++", "Java", "Python" },
b = { "Java", "Python", "C++" },
c = { "C#", "Python", "Java" };
if (a != b) {
cout << "a和b不相等\n";
}
else {
cout << "a和b相等\n";
}
if (a != c) {
cout << "a和c不相等\n";
}
else {
cout << "a和c相等\n";
}
return 0;
}
输出:
a和b相等
a和c不相等
C++ STL中的unordered_set =操作符
‘=’是C++ STL中的一个操作符,用于将unordered_set复制(或移动)到另一个unordered_set,而unordered_set::operator=是相应的操作符函数。有三个版本的此函数。
- 第一个版本以unordered_set的引用作为参数,并将其复制到unordered_set。
- 第二个版本执行移动分配,即将unordered_set的内容移动到另一个unordered_set。
- 第三个版本将初始化列表的内容分配给unordered_set。
语法
uset.operator= ( unordered_set& us )
uset.operator= ( unordered_set&& us )
uset.operator= ( 初始化列表 )
参数:
- 第一个版本以unordered_set的引用作为参数。
- 第二个版本以unordered_set的右值引用作为参数。
- 第三个版本以初始化列表作为参数。
返回值: 所有版本的返回值都是指针的值(*this)。
下面的程序演示了C++中的unordered_set::operator=。
程序:
// C++代码演示了unordered_set::operator=()方法
#include <iostream>
#include <unordered_set>
using namespace std;
// 合并函数
template <class T>
T merge(T a, T b)
{
T t(a);
t.insert(b.begin(), b.end());
return t;
}
int main()
{
unordered_set<int> sample1, sample2, sample3;
// 列表初始化
sample1 = { 7, 8, 9 };
sample2 = { 9, 10, 11, 12 };
// 合并两个列表
sample3 = merge(sample1, sample2);
// 复制分配
sample1 = sample3;
// 打印unordered_set列表
for (auto it = sample1.begin(); it != sample1.end(); ++it)
cout << *it << " ";
cout << endl;
for (auto it = sample2.begin(); it != sample2.end(); ++it)
cout << *it << " ";
cout << endl;
for (auto it = sample3.begin(); it != sample3.end(); ++it)
cout << *it << " ";
cout << endl;
}
输出:
10 11 12 7 8 9
12 11 10 9
10 11 12 7 8 9