如何对const char*向量进行排序[重复]。


我目前正试图在C++中使用std::sort()对一个const char*向量进行排序。这是我目前的代码。

std::vector<std::vector<const char*>> PlayerManager::GetSortedHighscores()
{
    std::vector<std::vector<const char*>> sortedHighscores;

    std::fstream hsFileIStream;

    hsFileIStream.open("Highscores.csv", std::ios::in);

    if (hsFileIStream.fail())
    {
        return sortedHighscores;
    }

    std::string line;

    while (std::getline(hsFileIStream, line))
    {
        std::vector<const char*> lineV;
        std::stringstream s(line);
        std::string data;

        while (std::getline(s, data, ','))
        {
            lineV.push_back(data.c_str());
        }

        sortedHighscores.push_back(lineV);
    }

    std::sort(sortedHighscores.begin(), sortedHighscores.end(), CompareRecord);

    return sortedHighscores;
}

bool PlayerManager::CompareRecord(std::vector<const char*>& record1, std::vector<const char*>& record2)
{
    const int MOVE_INDEX = 3;
    return (record1[MOVE_INDEX] < record2[MOVE_INDEX]);
}

然而我收到以下错误:

‘PlayerManager::CompareRecord’: 非标准语法;使用’&’创建一个指向成员的指针

‘std::sort’: 没有找到匹配的重载函数。

‘void std::sort(const _RanIt,const _RanIt)’: 期待2个参数 – 提供3个。

如果有人能帮助我,我将非常感激。

解决方案:

将 CompareRecord 设为静态方法,并将其参数改为 const 引用。

class PlayerManager
{
    ...
    static bool CompareRecord(const std::vector<const char*>& record1, const std::vector<const char*>& record2);
    ...
};

你不能使用非静态方法,就像他们是reqular函数一样。但是在你的情况下,没有理由CompareRecord不能是静态的,甚至不能是一个常规函数。

给TA打赏
共{{data.count}}人
人已打赏
未分类

Asp.Net Core 3.1 IHost实现是否被设计为可重启?

2022-9-14 5:19:36

未分类

我如何在POWERSHELL中运行一个以特定名称开头的sql脚本,但我不知道名称的后半部分?

2022-9-14 5:19:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索