我正在尝试将多态类型作为映射中的键。
我想出了以下两个结构:
请注意,这Game
是一个抽象类,我使用的数据结构是:
std::unordered_map<gamePtr,int> _allGames;
whilegamePtr
是一个typedef
for:
unique_ptr<Game>
template<>
struct std::hash<std::unique_ptr<Game>> {
size_t operator()(std::unique_ptr<Game> game) const {
return (std::hash<string>()(std::to_string(game->firstTeamFinalScore()) + game->firstTeam() + game->secondTeam()));
}
};
struct cmp_games {
bool operator() (std::unique_ptr<Game> game1, std::unique_ptr<Game> game2) const {
return *game1 == *game2;
}
};
比较cmp_games
器似乎工作正常,但std::hash
不是因为它试图复制 a unique_ptr
(这是不可能的)而且我不知道如何克服它。很想听听一些建议(如果可能的话)。
编辑:比较器似乎也无法正常工作。如何使此地图unique_ptr
作为键正常工作?
编辑2:
想出了:
template<>
struct std::hash<std::unique_ptr<Game>> {
size_t operator()(const std::unique_ptr<Game>& game) const {
return (std::hash<string>()(std::to_string(game->firstTeamFinalScore()) + game->firstTeam() + game->secondTeam()));
}
};
template<>
struct std::equal_to<std::unique_ptr<Game>> {
bool operator() (const std::unique_ptr<Game>& game1,const std::unique_ptr<Game>& game2) const {
return *game1 == *game2;
}
};
他们应该足够吗?