C++ STL中的无序集合运算符

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)

参数: 此操作符函数接受两个无序集的引用 uset1uset2 作为参数进行比较。

返回值: 此方法在比较两个集合后返回布尔结果值。比较过程如下:

  • 首先比较它们的大小。
  • 然后查找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中的一个关系运算符,用于比较无序集合之间的相等和不相等。比较过程如下:

  1. 首先比较它们的大小。
  2. 然后在其中一个容器中查找每个元素是否在另一个中存在。

语法:

unordered_set1 != unordered_set2

参数: 该方法接受两个无序集合作为参数 unordered_set1unordered_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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程