Ho un piccolo problema quando uso le liste.Elenco C++ per rimuovere le stringhe duplicate
Cosa ho: Sto leggendo le righe da una chatbox dove nuove righe di testo vengono di tanto in tanto. Prendo sempre le ultime 20 righe dalla scatola, quindi voglio confrontarle con tutte le linee che ho recuperato prima. Se viene scoperta una nuova linea, viene inviata a una funzione esterna che disassembla la linea per un'ulteriore elaborazione. Prima ho usato array e vettori, ma la lista sembra essere il modo migliore per farlo.
La mia idea: Ho una lista chiamata usedlines che contiene tutte le vecchie linee già utilizzate. L'elenco fetchedLines contiene le ultime 20 righe recuperate dalla chat.
No Voglio semplicemente eseguire il ciclo su entrambi per scoprire se le righe recuperate contengono una nuova riga non visualizzata in precedenza. Dopo il ciclo, i resti nelle linee di lettura vengono gestiti fino alla funzione successiva.
Problema: quando eseguo il loop di questo ciclo, dopo un po 'ho un cattivo punto. Perché? Bonus: Qualcuno ha un'idea migliore per risolvere questo compito?
typedef list<string> LISTSTR;
LISTSTR::iterator f;
LISTSTR::iterator u;
LISTSTR fetchedlines;
LISTSTR usedLines;
fetchedlines.insert(fetchedlines.end(), "one");
fetchedlines.push_back("two");
fetchedlines.push_back("three");
fetchedlines.push_back("four");
fetchedlines.push_back("three");
usedLines.push_back("three");
usedLines.push_back("blää");
usedLines.push_back("lumpi");
usedLines.push_back("four");
for (u = usedLines.begin(); u != usedLines.end(); u++)
{
for (f = fetchedlines.begin(); f != fetchedlines.end(); f++)
{
if(*u==*f)
fetchedlines.remove(*f);
}
}
Controlla 'std :: set',' std :: remove_if' e 'std :: set_intersection' per una soluzione più veloce. –