2017-04-19 3 views
0

2つの配列に共通の要素がある場合、std set_unionは常に最初の配列から共通の要素を取りますか?下のコードスニペットから、常に最初の配列から共通の要素が選択されることが示されていますが、これは保証されていますか?それを第2から選ぶ方法。std set_unionは常に最初から共通の要素を取ります

#include <algorithm> 
#include <vector> 
#include <string> 
#include <iostream> 

struct Foo 
{ 
    Foo(int i, const std::string& n): id(i), name(n){} 
    int id; 
    std::string name; 
}; 

bool comp(const Foo& first, const Foo& second) 
{ 
    return first.id < second.id; 
} 

int main() 
{ 
    Foo foo5A(5, "A"); 
    Foo foo10A(10, "A"); 
    Foo foo15A(15, "A"); 
    Foo foo20A(20, "A"); 
    Foo foo25A(25, "A"); 
    Foo fooA[] = {foo5A, foo10A, foo15A, foo20A, foo25A}; 

    Foo foo10B(10, "B"); 
    Foo foo20B(20, "B"); 
    Foo foo30B(30, "B"); 
    Foo foo40B(40, "B"); 
    Foo foo50B(50, "B"); 
    Foo fooB[] = {foo10B, foo20B, foo30B, foo40B, foo50B}; 

    std::vector<Foo> fooUnion; 
    std::set_union(fooA, fooA+5, fooB, fooB+5, std::back_inserter(fooUnion), comp); 

    for(const auto& f : fooUnion) 
    { 
    std::cout << f.id << ":" << f.name << std::endl;  
    } 
} 

出力は次のとおり

5:A 
10:A 
15:A 
20:A 
25:A 
30:B 
40:B 
50:B 
+0

[この 'のstd :: set_union'参照](HTTP://en.cppreference .com/w/cpp/algorithm/set_union)を参考にしてください。 –

答えて

1

はい、それがない、参照hereから:

二組の組合は、いずれか一方に存在する要素によって形成されていますセットの、またはその両方。第1の範囲に等しい要素を有する第2の範囲の要素は、結果の範囲にコピーされない。

あなたはそれが第二(foob型)から選択したい場合は、引数を入れ替える:

std::set_union(fooB, fooB+5, fooA, fooA+5, std::back_inserter(fooUnion), comp); 
関連する問題