如何对 C++ 类的实例列表进行排序

问题描述 投票:0回答:1

我正在使用 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; });

我应该如何修复我的代码?我不知道该怎么办。还有其他方法可以对列表进行排序吗?

c++17 stdlist
1个回答
0
投票

你不能用

std::list
做到这一点。
std::sort
需要一对随机访问迭代器,而
std::list
显然不是这样的。

很可能您需要使用

std::vector
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.