Supprimer des Entrées en Double dans un C++ Vecteur
Veux juste supprimer les doublons. La piscine est vector<pair<string, int>>
, mais il me semble manquer de certains éléments au début du vecteur en quelque sorte. Quelqu'un peut-il vérifier la logique de la suppression? Merci 🙂
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;
}
Avez-vous l'esprit si elle obtient triés?
Eww, ces copies...
Plus facile (et probablement de façon plus rapide que la
Aussi, je suppose que vous voulez dire
Est cette déclaration if(j == i){continue;} nécessaire? Vous pouvez commencer la boucle de i+1.
Eww, ces copies...
Plus facile (et probablement de façon plus rapide que la
O(n^2)
manière qu'il faut actuellement) de le faire est d'ajouter tous les éléments pour un std::set
et ensuite revenir à une std::vector
.Aussi, je suppose que vous voulez dire
Pool
est un vector<pair<string, int>>
?Est cette déclaration if(j == i){continue;} nécessaire? Vous pouvez commencer la boucle de i+1.
OriginalL'auteur Jarrod Cabalzar | 2013-05-10
Vous devez vous connecter pour publier un commentaire.
C'est un problème très commun.
Parce que, après l'effacement d'un élément à la position j pointu va sauter un élément en raison de la j++ sur la boucle for.
la solution la plus facile pour résoudre le problème basé sur de votre code est à ajouter j-- après génération.effacer(iter):
OriginalL'auteur Gisway
Si vous n'avez pas l'esprit de tri le vecteur, alors vous pouvez utiliser
std::
. Que serait en O(Nlog(N))d'accord.
DONC, doit conserver une liste des questions les plus fréquemment posées sur les sujets les plus populaires, comme la Top 10 C++ Questions ou quelque chose. Que ce serait pratique. 😀
Parce que tous les algorithmes de la bibliothèque standard de travailler sur des plages ouvertes, et généralement, nous passons début, fin, qui est ouvert à de cette façon.
Si vous allez à trier, pourquoi ne pas
std::sort
?OriginalL'auteur juanchopanza