Estoy intentando encontrar casos duplicados de cadenas en las que tengo un vector de ~ 2,5 millones de cuerdas ~Comprobar si hay duplicados en gran vector de cadenas
En el momento en que usar algo como:
std::vector<string> concatVec; // Holds all of the concatenated strings containing columns C,D,E,J and U.
std::vector<string> dupecheckVec; // Holds all of the unique instances of concatenated columns
std::vector<unsigned int> linenoVec; // Holds the line numbers of the unique instances only
// Copy first element across, it cannot be a duplicate yet
dupecheckVec.push_back(concatVec[0]);
linenoVec.push_back(0);
// Copy across and do the dupecheck
for (unsigned int i = 1; i < concatVec.size(); i++)
{
bool exists = false;
for (unsigned int x = 0; x < dupecheckVec.size(); x++)
{
if (concatVec[i] == dupecheckVec[x])
{
exists = true;
}
}
if (exists == false)
{
dupecheckVec.push_back(concatVec[i]);
linenoVec.push_back(i);
}
else
{
exists = false;
}
}
Lo que está bien para archivos pequeños, pero obviamente termina tomando un tiempo extremadamente largo a medida que crece el tamaño del archivo debido al ciclo anidado y el número creciente de cadenas contenidas en dupecheckVec.
¿Cuál podría ser una forma menos horrible de hacer esto en un archivo grande?
ha pensado en utilizar el algoritmo de 'único' y 'borrado'? – lrm29
@ lrm29: unique requiere que los vectores estén ordenados, lo que puede o no ser un problema aquí. –
Es por eso que no lo publiqué como una respuesta. Es probable que el algoritmo no haya ocurrido con el OP. – lrm29