2012-03-20 2 views
0

Je trie un grand vecteur contenant des structures en utilisant heapsort et l'exécution de mon code est assez lente. Au lieu de stocker une structure dans le vecteur, je veux stocker un pointeur sur la structure maintenant. Ma question est, sous le capot, ce qui se passe réellement quand je trie les choses et serait-il plus rapide si je stocke un pointeur sur une structure plutôt que de stocker la structure elle-même?Tri d'un vecteur contenant un pointeur vers Struct VS Struct

+0

Cela peut dépendre du langage, du compilateur et de l'environnement d'exécution, mais en général, le tri est implémenté via une série de swaps. L'échange de pointeurs est généralement très bon marché, alors que le swapping (grand ou complexe) peut être assez coûteux. La vraie réponse à votre question est d'essayer les deux et de mesurer le résultat. – Mankarse

Répondre

0

Certainement oui. Le stockage d'objets en tant que valeurs dans des conteneurs stl entraînera l'exécution du constructeur de copie de l'objet stocké.

En général, pour les performances, il est préférable de stocker des pointeurs à la place. Cependant, vous devrez être plus prudent au sujet des fuites et de la sécurité des exceptions une fois que vous utilisez des pointeurs à la place.

Quoi qu'il en soit, la chose la plus simple qui se passe sur le tri est l'algorithme d'échange. Qui implique la construction de copie:

void swap(T & a, T & b) 
{ 
    T c = a; // copy constructing 
    a = b; // copy constructing 
    b = c; // copy constructing 
} 

Il est certainement beaucoup plus rapide de copier le pointeur au lieu d'objets plus gros.