c++ - 带有自定义比较器的 std::list::sort 出错( ')' 标记之前的预期主表达式)

标签 c++ stl sorting comparator

标题是主要问题。确切的场景(我正在“使用命名空间标准;”):

void SubstringMiner::sortByOccurrence(list<Substring *> & substring_list) {
   list::sort(substring_list.begin(), substring_list.end(), Substring::OccurrenceComparator);
}

这是比较器定义:

class Substring {
    // ...
    class OccurrenceComparator {
        public:
            bool operator() (Substring * a, Substring *b);
    }
};

比较器的实现直观而简单。我还在 std::set 中使用了一个非常相似的比较器,它工作正常。当我添加 sortByOccurrence() 函数时,它会在标题中显示错误。

我该怎么办?

编辑:我现在尝试将 Substring::OccurrenceComparator() 作为比较器传递,但出现以下错误:

g++ -Wall -g -c substring_miner.cpp -o obj/subtring_miner.o
substring_miner.cpp: In function ‘void SubstringMiner::sortByOccurrence(std::list<Substring*, std::allocator<Substring*> >&)’:
substring_miner.cpp:113: error: no matching function for call to ‘std::list<Substring*, std::allocator<Substring*> >::sort(std::_List_iterator<Substring*>, std::_List_iterator<Substring*>, Substring::OccurrenceComparator)’
/usr/include/c++/4.3/bits/list.tcc:303: note: candidates are: void std::list<_Tp, _Alloc>::sort() [with _Tp = Substring*, _Alloc = std::allocator<Substring*>]
make: *** [substring_miner] Error 1

我的代码行现在是:

list<Substring *>::sort(substring_list.begin(), substring_list.end(), Substring::OccurrenceComparator());

我无法删除模板,或者它给我一个错误,指出模板参数错误。

最佳答案

list 成员 sort 是一个非静态函数,因此必须在列表实例上调用。

substring_list.sort( Substring::OccurrenceComparator() );

编辑:您不能使用自由函数 std::sort,因为它需要随机访问迭代器,而 list 迭代器不需要。

关于c++ - 带有自定义比较器的 std::list::sort 出错( ')' 标记之前的预期主表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100671/

相关文章:

c++ - 如何按降序排序?

c++ - 没有<>的模板方法实现

c++ - 快速可变大小容器 C++

c++ - 将 lower_bound 与 vector<pair<string, double>> 一起使用时出错

sorting - Redis:将多个 HSET 排序集分组并汇总为一个排序集

php - SQL ORDER String (NumberOrder/CurrentYear) 来自两个表

c++ - 单例和新运算符 - 线程安全

c++ - 在Qt中获取毫秒精度的当前时间

c++ - 使用 Int 的初始化列表初始化 Long Double 的 vector

c++ - 在 C++ 中使用指向动态分配对象的指针 vector 时如何避免内存泄漏?