#include #include #include #include #include bool operator> (const GameObject& a, const GameObject& b) { return a.id > b.id; } template class Compare> class DereferenceCompare { Compare comp; public: bool operator()(const Tp* const a, const Tp* const b) const { return comp(*a, *b); } }; class GameDatabase { public: GameDatabase() = default; void Insert(ObjectId id, string name, size_t x, size_t y); void Remove(ObjectId id); vector DataByName(string name) const; vector DataByPosition(size_t x, size_t y) const; vector Data() const; private: map> m; }; void GameDatabase::Insert(ObjectId id, string name, size_t x, size_t y) { m[id] = {id, name, x, y}; } void GameDatabase::Remove(ObjectId id) { m.erase(id); } vector GameDatabase::DataByName(string name) const { vector v; for (auto i : m) { if (i.second.name == name) { v.push_back(i.second); } } return v; } vector GameDatabase::DataByPosition(size_t x, size_t y) const { vector v; for (auto i : m) { if (i.second.x == x && i.second.y == y) { v.push_back(i.second); } } return v; } vector GameDatabase::Data() const { vector v; for (auto i : m) { v.push_back(i.second); } return v; }