#include <map>
#include <string>
#include <vector>
using std::string;
using std::map;
using std::vector;
class GameDatabase
{
private:
map<ObjectId, GameObject> list;
public:
GameDatabase() = default;
void Insert(ObjectId id, string name, size_t x, size_t y) {
Remove(id);
GameObject obj;
obj.id = id;
obj.name = name;
obj.x = x;
obj.y = y;
list[id] = obj;
}
void Remove(ObjectId id) {
if (list.find(id) != list.end()) {
list.erase(list.find(id));
}
}
vector<GameObject> DataByName(string name) {
vector<GameObject> result;
for (auto it = list.rbegin(); it != list.rend(); it++) {
if (it->second.name == name) {
result.push_back(it->second);
}
}
return result;
}
vector<GameObject> DataByPosition(size_t x, size_t y) {
vector<GameObject> result;
for (auto it = list.rbegin(); it != list.rend(); it++) {
if (it->second.x == x && it->second.y == y) {
result.push_back(it->second);
}
}
return result;
}
vector<GameObject> Data() {
vector<GameObject> result;
for (auto it = list.rbegin(); it != list.rend(); it++) {
result.push_back(it->second);
}
return result;
}
};