#include <map>
#include <vector>
#include <string>
#include <functional>
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<ObjectId, GameObject>::iterator it = dataBase_.find(id);
if (it != std::end(dataBase_))
dataBase_.erase(it);
}
vector<GameObject> DataByName(string name) const {
std::vector<GameObject> ret;
map<ObjectId, GameObject>::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<GameObject> DataByPosition(size_t x, size_t y) const {
std::vector<GameObject> ret;
for (auto elem : dataBase_)
if (elem.second.y == y && elem.second.x == x)
ret.push_back(elem.second);
return ret;
}
std::vector<GameObject> Data() const {
std::vector<GameObject> ret;
for (auto it = std::begin(dataBase_);
i != std::end(dataBase_);
++it)
ret.push_back(*elem);
return ret;
}
};