Sólo quieren eliminar los duplicados. La piscina es vector<pair<string, int>> pero me parece faltar algunos elementos en el inicio del vector de alguna manera. ¿Cualquier persona puede verificar la lógica de la eliminación? Gracias 🙂

Pool Master::eliminateDuplicates(Pool generation)
{
    for(int i = 0; i < generation.size(); i++)
    {
        string current = generation.at(i).first;

        for(int j = i; j < generation.size(); j++)
        {
            if(j == i)
            {
                continue;
            }
            else
            {
                string temp = generation.at(j).first;
                if(current.compare(temp) == 0)
                {
                    Pool::iterator iter = generation.begin() + j;
                    generation.erase(iter);
                }
            }
        }
    }

    return generation;
}
¿Te importa si se ordenan?
Eww, esas copias…
Una manera más fácil (y probablemente más rápido de manera que el O(n^2) forma que toma actualmente) de hacer esto es añadir todos los elementos para un std::set y luego de vuelta a un std::vector.
También, supongo que te refieres a Pool es un vector<pair<string, int>>?
Es esta declaración if(j == i){continue;} necesario? Usted puede iniciar el bucle de i+1.

OriginalEl autor T3CHN0CR4T | 2013-05-10

2 Comentarios

  1. 4

    Este es un problema muy común.

    Porque después de borrar un elemento de la posición j señaló va a saltar de un elemento debido a la j++ en el bucle for.
    la solución más sencilla para resolver el problema según su código es añadir j– tras generación.borrar(iter):

      generation.erase(iter);
      j--;
    Gracias, eso era todo. 😀

    OriginalEl autor Gisway

  2. 19

    Si no te importa ordenar el vector, entonces usted puede utilizar std::única. Que sería O(Nlog(N))

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    int main() 
    {
        std::vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
        std::sort(v.begin(), v.end()); 
        auto last = std::unique(v.begin(), v.end());
        v.erase(last, v.end());
        for (const auto& i : v)
          std::cout << i << " ";
        std::cout << "\n";
    }
    +1 Alguien debería escribir un wiki / FAQ para todo el pan y la mantequilla vector de usos.
    de acuerdo.
    ASÍ que debe mantener una lista de las preguntas más frecuentes sobre temas populares, como el Top 10 de C++ Preguntas o algo. Que sería útil. 😀
    Porque todos los de la biblioteca estándar de trabajo de los algoritmos en campos abiertos, y por lo general pasan begin, end, que está abierto en ese camino.
    Si usted va a ordenar, ¿por qué no std::sort?

    OriginalEl autor juanchopanza

Dejar respuesta

Please enter your comment!
Please enter your name here