#include #include #include #include using std::string; using std::map; class GameDatabase { private: std::map < ObjectId, GameObject, std::greater < ObjectId >> dataBase_; public: GameDatabase() = default; void Insert(ObjectId id, std::string name, size_t x, size_t y) { GameObject obj; obj.name = name; obj.id = id; obj.x = x; obj.y = y; dataBase_[id] = obj; } void Remove(ObjectId id) { map::iterator it = dataBase_.find(id); if (it != std::end(dataBase_)) dataBase_.erase(it); } vector DataByName(string name) const { std::vector ret; map::iterator i = dataBase_.begin() for (; i != dataBase_.end(); ++i) if (i->second.name.compare(name) == 0) ret.push_back(i->second); return ret; } std::vector DataByPosition(size_t x, size_t y) const { std::vector ret; for (auto elem : dataBase_) if (elem.second.y == y && elem.second.x == x) ret.push_back(elem.second); return ret; } std::vector Data() const { std::vector ret; for (auto it = std::begin(dataBase_); i != std::end(dataBase_); ++it) ret.push_back(*elem); return ret; } };