我目前正试图在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不能是静态的,甚至不能是一个常规函数。
下面的方法就可以了。
using namespace std::placeholders;
std::sort(
sortedHighscores.begin(),
sortedHighscores.end(),
std::bind(&PlayerManager::CompareRecord, this, _1, _2)
);