Ich frage mich, ob es eine Einrichtung in der Standard-Bibliothek gibt, um gleichzeitig den gesetzten Schnittpunkt zu berechnen und die Differenz zwischen zwei sortierten Bereichen festzulegen. Etwas mit einer Signatur entlang der Linien von:set_difference und set_intersection simultan
template <class Input1, class Input2,
class Output1, class Output2, class Output3>
Output3 decompose_sets (Input1 first1, Input1 last1,
Input2 first2, Input2 last2,
Output1 result1, Output2 result2,
Output3 result3);
, so daß nach einem Aufruf an decompose sets
, result1
enthält alle Elemente in [first1,last1)
die nicht in [first2,last2)
, result2
alle Elemente in [first2,last2)
enthält, die nicht in [first1,last1)
, und result3
enthält alle Elemente, die in [first1,last1)
und [first2,last2)
gemeinsam sind.
Die Beispielimplementierungen set_difference
und set_intersection
von cplusplus.com scheinen, als könnten sie mir helfen, eine effiziente Implementierung zu erstellen, die nur einen Scan statt drei durchführt. Wenn es in der Standardbibliothek ist, würde ich es hassen, das Rad neu zu erfinden.
Beispiel durch Anfrage:
Gegeben seien zwei Sätze a = {0, 1, 2, 3, 4} und B = {2, 4, 5, 6}, dann würde Ich mag die folgenden drei bauen Sets:
- only_a = {0,1,3}
- only_b = {5,6}
- gemeinsamen = {2,4}
Wie kommt es '[first1, last2)'? – P0W
Können Sie ein Beispiel geben, was Sie erreichen möchten, zum Beispiel mit den Sets {0, 1, 2, 3} und {0, 2, 4, 6}? – cpp
@ P0W b/c der Tippfehler – cheshirekow