PDA

Visualizza la versione completa : [C++] Confronto tra vector di stringhe


freetom
29-11-2009, 22:49
Ho due vector:



vector<string> vec;
vector<string> vec2;


contenente il primo 84.000 stringhe e il secondo 85.760 stringhe

avrei necessita di confrontarli per rilevare solo le stringhe che non sono presenti in entrambi i vector...

In php avrei fatto un array_diff(vec, vec2) ma in c++?

Grazie 1000

:ciauz:

freetom
30-11-2009, 10:19
Originariamente inviato da freetom
Ho due vector:



vector<string> vec;
vector<string> vec2;


contenente il primo 84.000 stringhe e il secondo 85.760 stringhe

avrei necessita di confrontarli per rilevare solo le stringhe che non sono presenti in entrambi i vector...

In php avrei fatto un array_diff(vec, vec2) ma in c++?

Grazie 1000

:ciauz:

Cerco di spiegarmi meglio con un esempio ridotto...

in vector ho ad esempio A,B,C,D,E,F,G
in vector2 ho A,B,C,F,G

io vorrei effettuare la differenza tra i due vectors e ottenere nell'es: D e E

Grazie

:ciauz:

p91paul
30-11-2009, 10:51
Io ti consiglio di fare un for che carica in un 3o vector tutte le stringhe del primo, e poi passa tutto il secondo e le cerca nel 3o vector (che magari non sarebbe male fosse ordinato cosi puoi fare ricerca binaria); se ne trova una la toglie, se non la trova la aggiunge.
Non so dirti se esiste un metodo dei vector cerca nella guida dell'stl

freetom
30-11-2009, 10:59
Originariamente inviato da p91paul
Io ti consiglio di fare un for che carica in un 3o vector tutte le stringhe del primo, e poi passa tutto il secondo e le cerca nel 3o vector (che magari non sarebbe male fosse ordinato cosi puoi fare ricerca binaria); se ne trova una la toglie, se non la trova la aggiunge.
Non so dirti se esiste un metodo dei vector cerca nella guida dell'stl

purtroppo i tempi mi risultano essere proibitivi per completare l'operazione (ca 120 giorni mettendoci 2 min. ca per ogni riga) :old: :zizi:

ogni riga del primo file infatti deve essere confrontata con tutte le 85.000 righe del secondo e cosė via per tutte le 84.000 righe del primo file...

operazioni totali : 84.000 x 85.000 = 7.140.000 operazioni

Mi chiedevo appunto se fosse possibile un'operazione + rapida che richiedesse al massimo due o tre giorni di elaborazioni... :popcorn:

:ciauz:

p91paul
30-11-2009, 11:06
Se ci metti 2 min per riga sei fregato!diventa molto impo l'ordinamento del 3o vettore!
Anche perche' quella funzione che hai citato non credo proprio che faccia qualcos'altro...puoi cercare quale sia l'implementazione di quella funzione per capire se e' piu performante ma ne dubito!
Comunque non e possibile che ci metta cosi tanto perche per metterci 2 minuti dovrebbero essere circa 12 GB per riga! e 160000 righe cosi' in che hard disk le fai stare?

freetom
30-11-2009, 11:13
Originariamente inviato da p91paul
Se ci metti 2 min per riga sei fregato!diventa molto impo l'ordinamento del 3o vettore!
Anche perche' quella funzione che hai citato non credo proprio che faccia qualcos'altro...puoi cercare quale sia l'implementazione di quella funzione per capire se e' piu performante ma ne dubito!
Comunque non e possibile che ci metta cosi tanto perche per metterci 2 minuti dovrebbero essere circa 12 GB per riga! e 160000 righe cosi' in che hard disk le fai stare?

voglio dire i due files txt da confrontare sono costituiti entrambi da qualcosa di questo tipo semplicemente...

file1.txt

1,2,3
4,10,11
ecc...

file2.txt

45,78,90
2,44,78
ecc...

Quindi? Quanto ci dovrei mettere secondo te? E soprattutto con quale metodo + pratico e veloce? :confused:

GRAZIE!!!

:ciauz:

p91paul
30-11-2009, 11:34
Originariamente inviato da freetom
ogni riga del primo file infatti deve essere confrontata con tutte le 85.000 righe del secondo e cosė via per tutte le 84.000 righe del primo file...

operazioni totali : 84.000 x 85.000 = 7.140.000 operazioni

hai ragione... a parte che hai dimenticato 3 zeri :messner: ma io intendevo un'altra cosa!

se tu hai il vettore ordinato (usa sort (iterator begin, iterator end) ), poi passi il secondo vector e per ogni elemento fai bynary_search(non ricordo i parametri), impieghi n log n per l'ordinamento e n log n per le ricerche che vuol dire
84000*16circa+85000*16circa=2700000 operazioni circa.
Il computer ne fa piu o meno 100'000'000 al secondo pero devi moltiplicare quei 3000000 per la lunghezza delle stringhe. Dovresti fare abbastanza veloce!

p91paul
30-11-2009, 11:37
Se sono 3 numeri per riga e fai come ti ho detto parliamo di tempi da misurare in secondi!O al massimo minuti! :stordita: :popcorn:

freetom
30-11-2009, 11:57
Grazie!

Evidentemente sto impantanandomi in dei cicli infiniti quanto inutili :stordita:

:ciauz:

Loading