#include <map>
#include <vector>
#include <utility>
#include <string>
#include <functional>
class GameDatabase {
public:
GameDatabase() = default;
void Insert(ObjectId id, std::string name, size_t x, size_t y) {
objects[id] = {name, {x, y}};
}
void Remove(ObjectId id) {
objects.erase(id);
}
vector<GameObject> DataByName(string name) const {
vector<GameObject> answer;
for (auto item : objects) {
if (item.second.first == name) {
answer.push_back({item.first,
item.second.first,
item.second.second.first,
item.second.second.second});
}
}
return answer;
}
vector<GameObject> DataByPosition(size_t x, size_t y) const {
vector<GameObject> answer;
for (auto item : objects) {
if (item.second.second.first == x &&
item.second.second.second == y) {
answer.push_back({item.first,
item.second.first,
item.second.second.first,
item.second.second.second});
}
}
return answer;
}
vector<GameObject> Data() const {
vector<GameObject> answer;
for (auto item : objects) {
answer.push_back({item.first,
item.second.first,
item.second.second.first,
item.second.second.second});
}
return answer;
}
private:
map<ObjectId, pair<string, pair<size_t, size_t>>,
std::greater<ObjectId>> objects;
};