Dobra myśl, Mecz dodaje dane do kontenera z archiwalnymi wynikami
więc statystykę podbijasz tam.
#include <iostream>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class Sportsmen
{
private:
string name;
double strength;
double health;
//...
public:
Sportsmen(const string &name,double strength):name(name),strength(strength) {}
const string &getName()const { return name; }
double getStrength()const { return strength; }
double getHealth()const { return health; }
//...
bool operator<(const Sportsmen &s)const { return name<s.name; }
};
class SportsmenFight
{
private:
const Sportsmen &sportsmen;
double health;
public:
SportsmenFight(const Sportsmen &sportsmen):sportsmen(sportsmen)
{
health=sportsmen.getHealth();
}
const Sportsmen &getSportsmen()const { return sportsmen; }
};
class Result
{
public:
enum State { Win=1,Draw=0,Loose=-1 };
private:
State state;
const Sportsmen &who,&opp;
public:
Result(const Sportsmen &who,const Sportsmen &opp,State state):who(who),opp(opp),state(state) {}
};
class Statistics
{
private:
multimap<Sportsmen,Result> map;
public:
void insert(const Sportsmen &s,const Result &r)
{
map.insert(make_pair(s,r));
}
};
class System
{
public:
Statistics statistics;
vector<Sportsmen> sportsmens;
void match(size_t sa,size_t sb)
{
SportsmenFight a(sportsmens[sa]);
SportsmenFight b(sportsmens[sb]);
Result::State state=Result::Draw;
bool done=false;
while(!done)
{
//...
done=true;
statistics.insert(a.getSportsmen(),Result{a.getSportsmen(),b.getSportsmen(),(Result::State)+state});
statistics.insert(b.getSportsmen(),Result{b.getSportsmen(),a.getSportsmen(),(Result::State)-state});
}
}
};
int main()
{
return 0;
}