📜  C++ 中的对集

📅  最后修改于: 2022-05-13 01:57:05.113000             🧑  作者: Mango

C++ 中的对集

集合是一种关联容器,其中每个元素都必须是唯一的,因为元素的值标识了它。元素的值一旦添加到集合中就不能修改,尽管可以删除和添加该元素的修改值。

Pair 是在标头中定义的一个简单容器,由两个数据元素或对象组成。

  • 第一个元素被称为“第一”,第二个元素被称为“第二”,并且顺序是固定的(第一,第二)。
  • Pair 用于将类型可能不同的两个值组合在一起。 Pair 提供了一种将两个异构对象存储为一个单元的方法。
  • 可以分配、复制和比较对。在 map 或 hash_map 中分配的对象数组默认为“pair”类型,其中所有“first”元素都是与其“second”值对象关联的唯一键。
  • 要访问元素,我们使用变量名后跟点运算符,然后是关键字 first 或 second。
  • 集合中的对按排序顺序存储,按键排序,即对的第一个值。

配对集有助于执行以下操作:

  • 添加一对,但不允许重复。
  • 删除对。
  • 获取不同对的计数。
  • 检查一对是否存在于集合中。

创建对集合的语法是:

set>set_name;

创建对组

示例:使数组中存在的所有偶数成对。

Input: 2 3 1 6 5 8 10 9
Output: (2, 6) (2, 8) (2, 10) (6, 8) (6, 10) (8, 10)

Input: 4 4 6 4
Output: (4, 4) (4, 6)

Input: 24 24 24 24
Output: (24, 24)

Input: 7, 100, 53, 81
Output: No valid pair

下面的程序说明了上述问题的解决方案:

在此示例中,基于范围的 for 循环与 const 参考一起使用,以提高速度和安全性,迭代容器中的所有元素。变量“x”的类型为“pairs”。要访问对的元素,请使用变量名后跟点运算符,然后是关键字“第一”或“第二”,这些是类对的公共成员。

程序:

// C++ program to create Set of Pairs
  
#include 
using namespace std;
  
typedef pair pairs;
  
// Constant reference
// reference for speed const to avoid changing values
void display(const set& s)
{
    bool found = false;
  
    // range-based for loop
    for (auto const &x : s) {
        found = true;
        cout << "(" << x.first << ", "
             << x.second << ")"
             << " ";
    }
  
    if (not found) {
        cout << "No valid pair\n";
    }
}
int main()
{
    vector v{ 2, 3, 1, 6, 8, 8, 10, 2 }; 
    set s;
      
    
  
    for (int i = 0; i < v.size() - 1; i++) {
        for (int j = i + 1; j < v.size(); j++) {
  
            // check for even number
            if (v[i] % 2 == 0 && v[j] % 2 == 0) {
  
                // makes pairs of even numbers
                pairs x = make_pair(v[i], v[j]);
  
                // inserts into the set
                s.insert(x);
            }
        }
    }
  
    // to display the pairs
    display(s);
  
    // to clear the set
    s.clear();
}
输出:
(2, 2) (2, 6) (2, 8) (2, 10) (6, 2) (6, 6) (6, 8) (6, 10) (8, 2) (8, 8) (8, 10) (10, 2) (10, 10)