部分排序带有lambda谓词的向量

时间:2014-12-02 08:01:30

标签: c++ sorting

我想用谓词对此向量进行部分排序

std::vector<std::pair<std::string, int>> vp;

        std::partial_sort(vp.begin(), vp.begin()+10, [](const std::pair<std::string,int> &left, const std::pair<std::string,int> &right)
        {
            return left.second > right.second;
        });

但是我收到了错误

 no matching function for call to ‘partial_sort(std::vector<std::pair<std::basic_string<char>, int> >::iterator, __gnu_cxx::__normal_iterator<std::pair<std::basic_string<char>, int>*, ....

以上工作适用于std :: sort而不适用于partial_sort任何建议?

1 个答案:

答案 0 :(得分:4)

查看一些reference documentation,您会发现std::partial_sort需要3个迭代器,而不是2:start,middle和end。它将重新排列范围,以便对范围[start, middle)进行排序,并包含范围[start, end)中的最小元素。

根据您尝试实现的目标,您需要提供适当的第3个迭代器。如果您正在尝试查找10个最小元素,请执行以下操作:

std::partial_sort(vp.begin(), vp.begin()+10, vp.end(), /*lambda as before*/);