如何对const char *向量的向量进行排序

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

我目前正在尝试在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个

如果有人可以提供帮助,将不胜感激。

c++ sorting pointers stl stdvector
1个回答
0
投票

以下将起作用:

using namespace std::placeholders;
std::sort(
    sortedHighscores.begin(),
    sortedHighscores.end(),
    std::bind(&PlayerManager::CompareRecord, this, _1, _2)
);

0
投票

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

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

您不能像非常规方法那样使用非静态方法。但是在您的情况下,没有理由CompareRecord不能为静态。

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