ho qualche codice che assomiglia a questo:std :: inserter con set - insert to begin() o end()?
std::set<int> s1, s2, out;
// ... s1 and s2 are populated ...
std::set_intersection(s1.begin(), s1.end(),
s2.begin(), s2.end(),
std::inserter(out, out.end()));
ho inserti di lettura può essere fatto in tempo costante ammortizzato se il valore viene inserito al set segue immediatamente l'iteratore dato come un "suggerimento". Ciò sarebbe ovviamente utile quando si esegue l'intersezione impostata, soprattutto perché tutto ciò che viene scritto su out
è già in ordine.
Come garantire questa prestazione ottimale? Quando si crea std::inserter
, out
è vuoto quindi out.begin() == out.end()
quindi non riesco a vedere fa alcuna differenza se si specifica out.begin()
o out.end()
come suggerimento. Tuttavia, se questo viene interpretato all'inserimento di ogni elemento su begin()
, non sembra che otterrei le prestazioni algoritmiche ottimali. Questo può essere fatto meglio?
@Ahsley: Almeno selezionando 'end' non si pessima l'algoritmo poiché non esiste un elemento successivo (risparmiando così un confronto). Mi chiedo tuttavia (come lo sei tu) se l'iteratore che passi si evolverà realmente o si bloccherà all'inizio/alla fine. –