-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfootball.h
102 lines (94 loc) · 2.11 KB
/
football.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#pragma once
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
class Player;
struct Team
{
string name;
vector < Player * > players;
Team(string n) : name(n) {}
};
struct Player
{
string name;
Team *team;
int pop;
Player(string n, Team *t = NULL, int p = 0) : name(n), team(t), pop(p) {}
bool operator<(const Player &p) const
{
for (int i=0; i<min(name.length(), p.name.length()); ++i)
if(name[i] != p.name[i])
return name[i] < p.name[i];
return name.length() < p.name.length();
}
bool operator<=(const Player &p) const
{
for (int i = 0; i < min(name.length(), p.name.length()); ++i)
if (name[i] != p.name[i])
return name[i] < p.name[i];
return name.length() <= p.name.length();
}
bool operator>(const Player &p) const
{
for (int i = 0; i < min(name.length(), p.name.length()); ++i)
if (name[i] != p.name[i])
return name[i] > p.name[i];
return name.length() > p.name.length();
}
bool operator==(const Player &p) const
{
return name.compare(p.name) == 0;
}
};
struct Football
{
vector < Team * > teams;
vector < Player * > players;
Football(string path)
{
ifstream data(path);
string line, prv;
Team *cur;
while (getline(data, line, '\n'))
{
stringstream line_stream(line);
string name, club, pop;
getline(line_stream, name, ',');
getline(line_stream, club, ',');
for(int i=0; i<5; ++i) // age, position, cat, market_value, page_views
getline(line_stream, pop, ',');
if (prv.length())
{
if (club != prv)
{
if (prv != "club")
teams.push_back(cur);
cur = new Team(club);
}
Player *player = new Player(name, cur, stoi(pop));
cur->players.push_back(player);
players.push_back(player);
}
prv = club;
}
teams.push_back(cur);
}
};
typedef long long ll;
namespace std
{
template <>
struct hash < Player * >
{
static const size_t p = 2147483647; // 8th Mersenne prime
ll m, a, b;
hash < Player * >(int m, int a = 1, int b = 0) : m(m), a(a), b(b) {}
size_t operator()(const Player *player) const
{
return size_t(((a*hash < string >()(player->name) + b)%p)%m);
}
};
}