2017-04-19 4 views
0

Wenn es gemeinsame Elemente in zwei Arrays gibt, nimmt std set_union immer diese gemeinsamen Elemente aus dem ersten Array? Aus dem darunter liegenden Code-Snippet wird ersichtlich, dass es immer Elemente aus dem ersten Array auswählt, aber ist dies garantiert? Wie man es macht, um von der Sekunde zu wählen.nimmt std set_union immer gemeinsame Elemente von zuerst

#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;  
    } 
} 

Der Ausgang ist:

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

[Dieses 'std :: set_union' Referenz] (http: //en.cppreference .com/w/cpp/algorithm/set_union) sollte hilfreich sein. –

Antwort

1

Ja, es der Fall ist, von dem Referenz here:

die Vereinigung von zwei Sätzen durch die Elemente gebildet wird, die entweder in einer vorhandenen der Sätze oder in beiden. Elemente aus dem zweiten Bereich, die ein äquivalentes Element im ersten Bereich haben, werden nicht in den resultierenden Bereich kopiert.

Wenn Sie es von der zweiten (Foob) auswählen möchten, tauschen Sie die Argumente:

std::set_union(fooB, fooB+5, fooA, fooA+5, std::back_inserter(fooUnion), comp); 
Verwandte Themen