I have a map for keeping the team name and players of the team std:pair<std::string, std::vector<std::string> > and a set of pointers to players to keep the players sorted in descending order by wins. And there's the catch - one player can participate in more than one team.
class Player
{
public:
int wins;
std::string name;
Player() {}
Player(std::string name) : wins(0), name(name) {}
bool operator<(const Player* rhs) const
{
return this->wins > rhs->wins;
}
bool operator()(const Player* lhs, const Player* rhs) const
{
return lhs->wins > rhs->wins;
}
};
int main()
{
// EXAMPLE
std::set<Player*> players;
std::map<std::string, std::vector<Player> > teams;
teams["TeamA"].push_back(Player("a"));
teams["TeamB"].push_back(Player("a"));;
players.insert(&teams["TeamA"].front());
players.insert(&teams["TeamB"].front());
std::cout << players.size(); // output 2
return 0;
}
As you can see the players in 'TeamA' and 'TeamB' are identical but still in the set are added two pointers and I can't figure it out why.. Is there something I am missing ?
Aucun commentaire:
Enregistrer un commentaire