【问题标题】:How to sort vector of const char* vectors [duplicate]如何对const char *向量的向量进行排序[重复]
【发布时间】:2020-08-12 07:56:52
【问题描述】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      以下方法可行:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2020-01-24
        • 2013-10-15
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        相关资源
        最近更新 更多