2011-08-17 18 views

risposta

85

Si può fare qualcosa di simile:

std::set<int> s1; 
std::set<int> s2; 
// fill your sets 
s1.insert(s2.begin(), s2.end()); 
+2

Sto cercando di capire la differenza tra inserto per multinsieme e si fondono, nel contesto della fusione. Insert accetta O (logn) per ogni inserto, quindi O (nlogn) in totale; dove n è la dimensione del contenitore più piccolo. Mentre la fusione richiede solo O (n1 + n2). L'unica ragione per cui posso pensare di usare insert è che accetta qualsiasi iteratore e il fatto che la seconda complessità abbia un coefficiente di tre prima di esso. C'è qualche altra forte ragione per favorire l'inserimento dopo l'unione. – sumodds

+1

Non proprio, tranne che, a parità di condizioni, è la soluzione più semplice e generale. –

+1

Questa è una soluzione subottimale. Vedi la risposta di Antonio Pérez. – ManuelSchneid3r

26

Sembra che si sta chiedendo std::set_union.

+4

Nel caso in cui non sia necessario modificare le strutture originali, questa soluzione è la migliore. – freitass

5

guarda che std :: merge può fare per voi

cplusplus.com/reference/algorithm/merge

+5

@MooingDuck Non vedo il problema con l'unione. Unisci fa la stessa cosa dell'unione ma non fa nulla di speciale con duplicati come fa l'unione. E l'inserimento di un duplicato viene gestito dall'insieme stesso. – gsingh2011

Problemi correlati