Comparateur pour min de segment de mémoire en C++
Je suis en train de faire un min-tas1 de long
s en C++ à l'aide de la STL make_heap
, etc., mais ma comparaison ne semble pas être comparer correctement. Ce qui suit est mon comparateur:
struct greater1{
bool operator()(const long& a,const long& b) const{
return a>b;
}
};
Cependant, quand je std::pop_heap(humble.begin(),humble.end(),g);
où g
est une instance de greater1
et humble
est un segment qui fait [9,15,15,25]
quand sort_heap
est appelé, je reçois un 15
sauté.
Est mon comparateur de corriger? ce qui pourrait mal se passer?
EDIT:
J'ai réalisé que je suis en cours d'exécution sort_heap sans comparateur, alors que quand je le lance ce comparateur, je reçois [15,15,9,25]
de sort_heap
. Maintenant, je pense à ma comparaison n'est certainement pas de travail, mais pas sûr pourquoi.
1STL fait un max de segment de mémoire par défaut, j'ai donc besoin d'un comparateur.
- êtes-vous à l'aide de la même comparaison pour
make_heap
? - J'utilise la même comparaison pour
make_heap
mais juste de réaliser que je ne pourrait pas l'utiliser pour lasort_heap
. - Je veux faire un min-tas mais le TSL n'a max-heap si je le passe pas de point de comparaison.
- qu'entendez-vous par travail un exemple de code?
- Pardonnez-moi si je suis incorrect ici, je ne travaille pas en C/C++ beaucoup, mais ne pas
const long& a
etconst long& b
indiquer des pointeurs vers des valeurs constantes, et donc en comparanta
àb
est de comparer les adresses de ces valeurs? - c'est le passage par référence. Ils sont automatiquement déréférencé. un * faire un pointeur.
- Ah, oui. C'est le droit. Mépris de ma bêtise.
Vous devez vous connecter pour publier un commentaire.
Peut-être vous manque quelque chose, quelque part, le code ci-dessous fonctionne comme prévu:
g++ file.cpp;./a.out
) et il a finalement compilé après j'ai enlevé une erreur. Qui sait. De toute façon, puisque vous ont été utiles à la résolution de mon problème, je suis à accepter ceci.std::push_heap(humble.begin(),humble.end(),greater1());
à l'intérieur du bloc if.suffit d'utiliser
greater<int>()
. il est prédéfini en std.Vous voulez l'appeler make_heap sur le vecteur de nouveau, pas sort_heap. make_heap permet de réorganiser l'ensemble de votre vecteur dans un tas min compte tenu de la plus-que comparateur tandis que sort_heap sortes de votre élément en ordre croissant et n'est plus un segment de mémoire à tous!