我将尝试在一个映射中保存一个多态类型作为键。
我想出了以下两个结构:
请注意,Game
是一个抽象类,我使用的数据结构是:
std::unordered_map<gamePtr,int> _allGames;
gamePtr
是一个typedef
,它的含义是:
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
不行,因为它试图复制一个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;
}
};
他们够用吗?
unique_ptr
通过引用传递给operator()
? - user3072164cmp_games
实现。 - user3072164