當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ set_symmetric_difference用法及代碼示例


兩個排序範圍的對稱差
兩個集合之間的對稱差異是由其中一個集合中存在但另一個集合中不存在的元素形成的。在每個範圍內的等效元素中,被丟棄的是那些在調用之前以現有順序出現的元素。複製的元素的現有順序也會保留。
第一個版本使用operator< 來比較元素,第二個版本使用comp 來比較元素。如果 (!(a<b) && !(b<a)) 或 if (!comp(a, b) && !comp(b, a)),兩個元素 a 和 b 被視為等效。
範圍內的元素應已排序。
1. 使用默認運算符<:
句法:

Template :
OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1,
                                         InputIterator2 first2, InputIterator2 last2,
                                         OutputIterator result);

Parameters :

first1, last1
Input iterators to the initial and final positions of the first
sorted sequence. The range used is [first1, last1), which contains
all the elements between first1 and last1, including the element
pointed by first1 but not the element pointed by last1.

first2, last2
Input iterators to the initial and final positions of the second
sorted sequence. The range used is [first2, last2).

result
Output iterator to the initial position of the range where the
resulting sequence is stored.
The pointed type shall support being assigned the value of an
element from the other ranges.

comp
Binary function that accepts two arguments of the types pointed
by the input iterators, and returns a value convertible to bool.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.

The ranges shall not overlap.

Return Type :
An iterator to the end of the constructed range.

CPP


// CPP program to illustrate
// std :: set_symmetric_difference
#include <bits/stdc++.h>
using namespace std;
int main()
{
    // students attending first class
    std::vector<string> class1{ "Samir", "Manoj", "Pranav", "Rajesh" };
    // students attending second class
    std::vector<string> class2{ "Samir", "Junaid", "Manoj", "Pankaj", "Arpit" };
    cout << "Students attending first class are : ";
    for (auto i : class1) {
        cout << i << " ";
    }
    cout << "\nStudents attending second class are : ";
    for (auto i : class2) {
        cout << i << " ";
    }
    // to store the result of symmetric difference
    std::vector<string> result(10);
    std::vector<string>::iterator it;
    // finding symmetric difference
    it = set_symmetric_difference(class1.begin(),
                                  class1.end(), class2.begin(), class2.end(), result.begin());
    cout << "\n\nList of students that are not taking both classes :";
    for (std::vector<string>::iterator i = result.begin(); i != it; i++) {
        cout << *i << " ";
    }
    return 0;
}

輸出:

First array contains : 5 10 15 20 25
Second array contains : 50 40 30 20 10

The symmetric difference has 6 elements:
 5 15 25 30 40 50

2. 使用自定義函數:
句法:

Template :
OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1,
                                         InputIterator2 first2, InputIterator2 last2,
                                         OutputIterator result, Compare comp);

Parameters :

first1, last1, first2, last2, result are same as described above.

comp
Binary function that accepts two arguments of the types pointed
by the input iterators, and returns a value convertible to bool.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.

The ranges shall not overlap.

Return Type :
An iterator to the end of the constructed range.

CPP

輸出:

First array contains : 5 10 15 20 25
Second array contains : 50 40 30 20 10

The symmetric difference has 6 elements:
 5 15 25 30 40 50

可能的應用:它用於查找一個容器中存在但另一容器中不存在的元素。
1.用於查找不參加兩門課程的學生名單。兩個類的學生都出現在名單中。

CPP


// CPP program to illustrate
// std :: set_symmetric_difference
#include <bits/stdc++.h>
using namespace std;
int main()
{
    // students attending first class
    std::vector<string> class1{ "Samir", "Manoj", "Pranav", "Rajesh" };
    // students attending second class
    std::vector<string> class2{ "Samir", "Junaid", "Manoj", "Pankaj", "Arpit" };
    cout << "Students attending first class are : ";
    for (auto i : class1) {
        cout << i << " ";
    }
    cout << "\nStudents attending second class are : ";
    for (auto i : class2) {
        cout << i << " ";
    }
    // to store the result of symmetric difference
    std::vector<string> result(10);
    std::vector<string>::iterator it;
    // finding symmetric difference
    it = set_symmetric_difference(class1.begin(),
                                  class1.end(), class2.begin(), class2.end(), result.begin());
    cout << "\n\nList of students that are not taking both classes :";
    for (std::vector<string>::iterator i = result.begin(); i != it; i++) {
        cout << *i << " ";
    }
    return 0;
}

輸出:

Students attending first class are : Samir Manoj Pranav Rajesh 
Students attending second class are : Samir Junaid Manoj Pankaj Arpit 

List of students that are not taking both classes :Junaid Pankaj Arpit Pranav Rajesh 

2.它還可以用於從兩個列表中找出兩個列表中都不存在的數字。
上麵給出了程序。



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 set_symmetric_difference in C++ with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。