繁体   English   中英

C ++排序不区分大小写的向量对

[英]C++ Sort case insensitive vector pair

我有以下矢量

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM