我有以下矢量
std::vector< std::pair<std::string, std::pair<std::string, std::string> > > vecList;
在循环中我添加条目:
vecList.push_back(std::make_pair(name.toStdString(), std::make_pair(path.toStdString(), arguments.toStdString())));
我想打电话:
std::sort(vecList.begin(), vecList.end(), CompareSort);
bool SettingsData::CompareSort(const std::pair <std::string, std::pair<std::string, std::string> > &first,
const std::pair< std::string, std::pair<std::string, std::string> > &second)
{
unsigned int i=0;
/*
while ( (i < first.length()) && (i <second.length()) )
{
if (tolower(first[i]) < tolower(second[i]))
return true;
else if (tolower(first[i]) > tolower(second[i]))
return false;
++i;
}
return ( first.length() < second.length() );
*/
return true;
}
我想按第一对(名称)字符串排序,但是当我收到编译错误时:
error: no matching function for call to 'sort(std::vector<std::pair<std::basic_string<char>, std::pair<std::basic_string<char>, std::basic_string<char> > > >::iterator, std::vector<std::pair<std::basic_string<char>, std::pair<std::basic_string<char>, std::basic_string<char> > > >::iterator, <unresolved overloaded function type>)'
std::sort(vecList.begin(), vecList.end(), CompareSort);
任何人都可以提出我可能做错的提示
更新修复在我的头文件中,我只是将声明设置为静态:
static bool CompareSort(const std::pair< std::string, std::pair<std::string, std::string> > &first,
const std::pair< std::string, std::pair<std::string, std::string> > &second);
感谢Joachim的建议
最可能的原因是CompareSort
是一个非静态成员函数,这意味着它实际上有一个隐藏的第一个参数(this
指针)。如果你能使它static
它应该工作正常。否则,您可以使该函数成为非成员函数,或使用std::bind
。