Un premier point, si tu n'as que 5 cartes (et toujours 5 cartes) par joueur, le mieux est de définir ta structure ainsi:
#include<array>
struct Player
{
std::array<card,5> list;
};
Ca t'évitera des boulettes car std::array connaît sa taille, donc le compilateur pourra détecter une éventuelle erreur de débordement.
Si le joueur peut avoir des mains de taille différentes utilise plutôt std::vector, lui aussi connaît sa taille, le runtime debug pourra le cas échéant détecter une boulette.
Pour le problème du tri, il y a un problème, il te faut définir un critère de tri strict (éventuellement préfère std::stable_sort à std::sort, il est moins strict, il est capable de se débrouiller avec des éléments "équivalents"). Le soucis, c'est comment tu compare deux tableaux de 5 card?
On pourrait dire que la valeur du tableau est égale à la somme des number, ou à la moyenne, ou au minimum, maximum, ou n'importe quel autre critère.
Par exemple pour le max
#include<array>
#include<limits>
struct Player
{
std::array<card,5> list;
int max() const{
int value{std::numeric_limits<int>::min()};
for (auto const & c : list){
if (c.number > value){
value = c.number;
}
}
return value;
}
};
std::vector<player> players;
std::stable_sort(std::begin(players),std::end(players),
[](Player const & lhs,Player const & rhs)
{return lhs.max() > rhs.max();});
Arrête de faire des références à ce cours obsolète.
Pour préciser ce qui ne va pas dans ce chapitre :
- utilisation de using namespace std (encore et toujours)
- on va preferer std::begin et std::end plutot que les fonctions membres
- on va preferer auto plutot qu'ecrire explicitement le type iterator
- on va utiliser des fonctions lambdas plutot que des classes foncteurs
- utilisation de rand
- utilisation de 0 au lieu de nullptr
- utiliser un range-for loop plutot qu'un for avec un indice
Je n'ai pas relu le texte, il y a peut etre d'autres problèmes. Mais bon, ce n'est pas le pire chapitre (il est obsolète, mais je n'ai pas vu d'erreur apres une lecture rapide)
std::begin/std::end sont plus facilement adaptables sur n'importe quelles types, simplement en proposant de specialisation template spécifiques. Cela fonctionne avec les conteneurs de la lib standard bien sur, qui proposent deja les fonctions membres begin/end, mais egalement avec des types qui n'ont pas ete prévu a l'origine pour fonctionner avec begin/end (par exemple des tableaux C ou des tableaux d'autres libs).
C'est juste une question de recommendations, pour avoir une syntaxe homogène (utiliser partout std::begin/std::end plutot que de dépendre du type de collection).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.
Discord NaN. Mon site.
Eug
Discord NaN. Mon site.
Discord NaN. Mon site.