Как отсортировать список экземпляров класса C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как отсортировать список экземпляров класса C++

Сообщение Anonymous »

Я пишу программу на C++ для двухмерной ролевой игры, используя библиотеки SDL2. У меня есть класс с именем Entity, у которого есть свойство worldY:

Код: Выделить всё

class Entity
{
public:
...
// coordinate mondo: la mappa del mondo
int worldX = 0, worldY = 0;
}
В другом классе GamePanel я объявляю одно из его свойств:

Код: Выделить всё

std::list entityList;
std::vector npc;
Вектор NPC заполнен экземплярами:

Код: Выделить всё

class NPC_OldMan : public Entity
таким образом:

Код: Выделить всё

for (int i = 0; i < npc.size(); i++)
{
if (!npc.at(i).name.empty())
{
entityList.push_back(npc.at(i));
}
}
Теперь я хотел бы, чтобы список объектов был отсортирован в порядке возрастания по свойству worldY.
т.е. если npc1 имеет worldY = 10, а npc2 имеет worldY = 5, то в списке сущностей я хочу иметь npc2, а затем npc1.
Использование следующего включает в себя:

Код: Выделить всё

#include 
#include 
#include 
#include 
Я думал об этом:

Код: Выделить всё

std::sort(entityList.begin(), entityList.end(), [](Entity e1, Entity e2)
{
// Custom comparison logic
return e1.worldY < e2.worldY; // this sorts in ascending order
});
Но я не могу его скомпилировать, потому что выдает такую ​​ошибку:

Код: Выделить всё

Severity   Code    Description Project File    Line    Suppression State   Details Error   C2676   binary '-': 'const std::_List_unchecked_iterator' does not define this operator or a conversion to a type acceptable to the predefined operator with [ _Ty=Entity ]   My2DGame_21 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include\algorithm 8165         
Я тоже пытался это сделать, но результат не меняется, всегда получаю одну и ту же ошибку:

Код: Выделить всё

std::sort(entityList.begin(), entityList.end(), [](const auto& a, const auto& b) { return a.worldY < b.worldY; });
Как мне исправить свой код? Я не знаю, как это сделать. Есть ли другой способ сортировки списка?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -a-c-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»