Der Standardweg zwei Sätze in C++ von sich schneid ist folgendes zu tun:In-Place-C++ Schnittmenge
std::set<int> set_1; // With some elements
std::set<int> set_2; // With some other elements
std::set<int> the_intersection; // Destination of intersect
std::set_intersection(set_1.begin(), set_1.end(), set_2.begin(), set_2.end(), std::inserter(the_intersection, the_intersection.end()));
Wie würde ich über das Tun eine in-Place-Set Kreuzung gehen? Das heißt, ich möchte set_1 die Ergebnisse des Aufrufs von set_intersection haben. Offensichtlich kann ich einfach eine set_1.swap(the_intersection)
machen, aber das ist viel weniger effizient als das Schneiden an Ort und Stelle.
Die Fortsetzung ist redundant, und ich würde neu anordnen, um zu sein: if (* it1 <* it2) sonst if (* it2 <* it1) else ... 'so dass der einzige Vergleichsoperator, den Sie verwenden, kleiner ist als - So funktioniert 'set'. –
Richtig! Weil es wenn-sonst wenn, etc. Ich dachte, dass die folgenden Bedingungen überprüft würden. Danke, ich werde die Antwort bearbeiten. – ChrisInEdmonton
'set_1.erase (it1 ++)' ist falsch für einige Container (wie Vektor), auch wenn es in Ihrem Fall gültig ist. Sie sollten 'it1 = set_1.erase (it1)' verwenden, das für alle Container gültig ist. –