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

标签 c++ vector stl

我有以下 vector

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 .

关于C++ 排序不区分大小写的 vector 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396031/

相关文章:

c++ - 在 C++ 中对对象的输入数组进行排序

c++ - front() 和 begin() 的区别

c++ - iterator_traits SFINAE 友好性

c++ - “glCreateShader”未在此范围内声明?

c++ - 在 Python 的 SWIG 中包装 boost::shared_ptr 的 std::vector

c++ - 如何在C++中执行for循环直到队列为空

c++ - std::for_each 优于 for 循环的优点

c++ - 作弊 Linux : executables and dependent libraries via LD_PRELOAD

c++ - Visual Studio : Run C++ project Post-Build Event even if project is up-to-date

java - 将 Vector 元素从一个类更改为另一类