Eli vectoreita järjestykseen useammasta kuin yhdestä muuttujasta. Tarkoitatn tätä:
namespace Players { class Pelaajat { public: std::string nimi; int id; int ika; int palkka; int puolustus_taito; int maalivahti_taito; int hyokkays_taito; int tekniikka_taito; int agressiivisuus_taito; int kunto; bool valittuna; int team_id; int PlayPlace; public: Pelaajat(std::string nimi, int id, int ika, int palkka, int puolustus_taito, int maalivahti_taito, int hyokkays_taito, int tekniikka_taito, int agressiivisuus_taito, int kunto, bool valittuna, int team_id, int PlayPlace){ this->nimi = nimi; this->id = id; this->ika = ika; this->palkka=palkka; this->puolustus_taito = puolustus_taito; this->maalivahti_taito = maalivahti_taito; this->hyokkays_taito = hyokkays_taito; this->tekniikka_taito = tekniikka_taito; this->agressiivisuus_taito = agressiivisuus_taito; this->valittuna = valittuna; this->team_id = team_id; this->PlayPlace = PlayPlace; } std::string anna_nimi() { return this->nimi; } double anna_maalivahti() { return this->maalivahti_taito; } double anna_hyokkays() { return this->hyokkays_taito; } bool operator <(const Pelaajat& b) const { return (this->maalivahti_taito > b.maalivahti_taito); } };
Maalivahti taito järjestykseen mutta sen jälkeen pitäisi saada hyökkäys taito järjestykseen kaikki. Niin mitenhän se onnistuisi?
Itse tekisin varmaan uuden Taito-luokan jonka instansseja eri taidot olisivat.
Offtopic: Aggressiivisuus, ei agressiivisuus
namespace Players { class Hyokkays { } class Puolustus { } class Maalivahti { } }
Eli tähän tyylin?
Kannattaa varmaan luoda jokin taitoluokka ja instantoida siitä sitten noita taitoja. Selvästikään jokainen taito ei tarvitse omaa luokkaa. Maalivahti voisi olla oma periytetty luokka pelaajasta samoin kuin hyökkääjät ja puolustajat. Keräät kantaluokkaan pelaajat yhteiset asiat ja jalostat sitten siitä sopivat luokat pelaajatyypin mukaan.
#include <iostream> #include <vector> #include <string> class pelaaja { protected: std::string nimi; int ketteryys; int luistelunopeus; pelaaja(std::string nimi, int ketteryys, int luistelunopeus) { this->nimi = nimi; this->ketteryys = ketteryys; this->luistelunopeus = luistelunopeus; } }; class hyokkaaja : protected pelaaja { int ratkaisutaito; public: hyokkaaja(std::string nimi, int ketteryys, int luistelunopeus, int ratkaisutaito) : pelaaja(nimi, ketteryys, luistelunopeus) { this->ratkaisutaito = ratkaisutaito; } }; class puolustaja : protected pelaaja { int taklauskyky; int takaperin; public: puolustaja(std::string nimi, int ketteryys, int luistelunopeus, int taklauskyky, int takaperin) : pelaaja(nimi, ketteryys, luistelunopeus) { this->taklauskyky= taklauskyky; this->takaperin = takaperin; } }; int main() { std::vector <hyokkaaja> hyokkaajat; std::vector <puolustaja> puolustajat; hyokkaaja h("Juha", 15, 5, 6); puolustaja p("Simo", 10, 6, 15, 20); hyokkaajat.push_back(h); puolustajat.push_back(p); return 0; }
Tämä kokonaisuus olisi sitten osa joukkueluokkaa, josta tehdään aikanaan uusia joukkueita. Tuosta voisi ehkä lähteä jalostamaan toimivaa kokonaisuutta.
Lajittelijalle voi antaa predikaatin, siis vertailijan, jonka mukaan järjestäminen tehdään.
namespace Players { struct hyokkays_sort { bool operator()(Pelaajat const &a, Pelaajat const &b) { return a.hyokkays_taito < b.hyokkays_taito; } }; } // ... std::vector<Players::Pelaajat> joukkue; // lisää pelaajat joukkueeseen... // maalivahtijärjestys, oletusvertailijana <-operaattori: std::sort(joukkue.begin(), joukkue.end()); // hyökkäysjärjestys: std::sort(joukkue.begin(), joukkue.end(), Players::hyokkays_sort());
Vertailijan ei tarvitse olla noin hankalasti toteutettu, vaan ihan tavallinen funktio sopii.
bool vertaa_hyokkays(Pelaaja const &a, Pelaaja const &b) { return a.hyokkays_taito < b.hyokkays_taito; } std::sort(joukkue.begin(), joukkue.end(), vertaa_hyokkays);
Luokat on tapana nimetä yksikkömuodossa, siis pelaajaa kuvaavan luokan nimi on Pelaaja eikä Pelaajat. Silloin koodi näyttää luettuna järkevältä, esim. Pelaaja matti
eikä Pelaajat matti
. Olethan itsekin ihminen etkä ihmiset.
Aihe on jo aika vanha, joten et voi enää vastata siihen.