Как отсортировать переменные, которых нет в массиве? - PullRequest
0 голосов
/ 14 января 2020

Итак, у меня есть класс с пятью целочисленными членами

struct Person {
    int health;
    int sport;
    int relatioship;
    int happiness;
    int intelligence;
};

Я хочу знать, какой из них имеет наибольшее значение, а какой второй самый высокий ... В зависимости от ранга этих 5 целых чисел, которые я хочу назначить им работу.

Ответы [ 2 ]

0 голосов
/ 15 января 2020
struct Person {
int health;
int sport;
int relationship;
int happiness;
int intelligence;
Person(int a, int b,int c, int d, int e) 
{
    health=a;
    sport=b;
    relationship=c;
    happiness=d;
    intelligence=e;
}
};
bool compare (Person a,Person b) 
{   
    return a.health>b.health;
};

int main() {
vector<Person>v;
v.push_back(Person(1,2,3,4,5));
v.push_back(Person(2,3,4,5,6));
sort(v.begin(), v.end(),compare);
for (auto x : v) 
    cout << x.health << ", " << x.sport<<endl; 

return 0;
}
Based off highest health: 
2, 3
1, 2

 Since I don't know how your comparison works it will be similar to this.
0 голосов
/ 15 января 2020

Вы можете отсортировать представление каждого из значений и использовать его для выбора задания.

enum Stat {
    Health;
    Sport;
    Relatioship;
    Happiness;
    Intelligence;
};

using Stats = std::array<Stat, 5>;
using Job = std::string;

int getStat(Person p, Stat s) {
    switch (s) {
        case Health: return p.health;
        case Sport: return p.sport;
        case Relatioship: return p.relatioship;
        case Happiness: return p.happiness;
        case Intelligence: return p.intelligence;
    }
}

Stats getStats(Person p) {
    Stats result = { Health, Sport, Relatioship, Happiness, Intelligence };
    std::sort(result.begin(), result.end(), [](Stat left, Stat right) { return getStat(p, left) < getStat(p, right); });
    return result;
}

Job getJob(Person p) {
    Stats stats = getStats(p);

    if (stats == { Sport, Health, Relatioship, Happiness, Intelligence })
        return "Footballer";
    else if (stats == { Intelligence, Health, Sport, Relatioship, Happiness })
        return "Banker";
    /* 118 more entries like that */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...