4 #include <ext/hash_map>
9 // These are needed to be able to use std::string as key in a hash_map.
11 template< typename CharT, typename Traits, typename Alloc >
12 struct hash< std::basic_string<CharT, Traits, Alloc> > {
13 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
15 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
17 return c.hash(s.c_str(), s.c_str() + s.size());
23 template< typename CharT, typename Traits, typename Alloc >
24 struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
26 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
28 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
30 return c.hash(s.c_str(), s.c_str() + s.size());
36 enum StreetType{foot, car, both};
37 enum PlayerType{robber, cop_foot, cop_car};
38 enum IntersectionType{hq, bank, robber_start, ordinary};
41 __gnu_cxx::hash_map<std::string,StreetType> connections;
58 T value(std::string input);
62 Bot(const std::string& name, PlayerType type);
70 virtual std::string turn();
71 void move(std::string location);
72 std::list<std::string> shortestPath(const std::string& from, const std::string& to, PlayerType type);
74 __gnu_cxx::hash_map<std::string, Intersection> _intersections;
75 __gnu_cxx::hash_map<std::string, Player> _players;
76 __gnu_cxx::hash_map<std::string, int> _banks;
77 std::map<PlayerType, std::string> _playerTypeNames;
78 std::map<std::string, PlayerType> _playerTypes;
81 std::string _location;