У меня есть проект, в котором у меня есть файл игры, который содержит объекты роботов.Файл игры сохраняет объекты робота, используя карту.Карта содержит имя робота в качестве ключа, а значение - объект робота.
Роботы находятся в двухмерном пространстве, и у них есть x, y, чтобы найти свою текущую позицию.
Одна из функций, которую я должен реализовать, - сортировать роботов от самых маленьких до самых больших, находякак далеко они находятся от исходной точки (0, 0).
Это моя карта:
std::map<std::string, robot> robot_map;
Я инициализирую робота с именем и двумя переменными, чтобы узнать местоположение итретий, чтобы найти общее количество предпринятых шагов:
robot::robot(const string &n) : robot_name(n) { x = 0, y = 0, t = 0; }
И чтобы проверить расстояние робота от источника, я использую это:
std::string game::furthest() const
{
int furthest = 0;
std::string max_name;
typedef std::map<std::string, robot>::const_iterator iter;
for (iter p = robot_map.cbegin(); p != robot_map.cend(); ++p) {
if (distance(p->second) > furthest) {
furthest = distance(p->second);
max_name = p->first;
}
}
return max_name;
}
И это функция расстояния:
int distance(const robot &r) {
int distance;
int y = r.north();
int x = r.east();
distance = abs(x - 0) + abs(y - 0);
return distance;
}
В моей последней функции я хотел бы отсортировать их по вектору, вот что у меня сейчас есть:
std::vector<robot> game::robots_by_travelled() const
{
std::vector<robot> robots;
int furthest = 0;
typedef std::map<std::string, robot>::const_iterator iter;
for (iter p = robot_map.cbegin(); p != robot_map.cend(); ++p) {
robots.push_back(p->second);
}
return robots;
;
}
Есть ли способ отсортировать вектор по их расстоянию от начала координат(0, 0)?