Il metodo standard di intersecano due set in C++ è quello di effettuare le seguenti operazioni:in-place C++ impostare intersezione
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()));
Come potrei fare per fare una serie di intersezione sul posto? Cioè, voglio che set_1 abbia i risultati della chiamata a set_intersection. Ovviamente, posso solo fare un set_1.swap(the_intersection)
, ma questo è molto meno efficiente di intersecare sul posto.
I continui sono ridondanti, e mi piacerebbe riorganizzare per essere 'if (* it1 <* it2) else if (* it2 <* it1) else ...' in modo che l'unico operatore di confronto che stai utilizzando sia inferiore a - questo è il modo in cui 'set' funziona. –
Giusto! Perché è se-else se, ecc. Stavo pensando che i seguenti condizionali sarebbero stati controllati. Grazie, modificherò la risposta. – ChrisInEdmonton
'set_1.erase (it1 ++)' non è corretto per alcuni contenitori (come il vettore), anche se è valido nel tuo caso. Dovresti usare 'it1 = set_1.erase (it1)' che è valido con tutti i contenitori. –