我正在使用 SDL2 库为 2D RPG 游戏编写 C++ 程序。我有一个名为 Entity 的类,它有一个名为 worldY 的属性:
class Entity
{
public:
...
// coordinate mondo: la mappa del mondo
int worldX = 0, worldY = 0;
}
在另一个类 GamePanel 中我声明了它的一个属性:
std::list<Entity> entityList;
std::vector<Entity> 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 <algorithm>
#include <iostream>
#include <list>
#include <iterator>
我正在考虑使用这个:
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<std::_List_val<std::_List_simple_types<_Ty>>>' 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; });
我应该如何修复我的代码?我不知道该怎么办。还有其他方法可以对列表进行排序吗?