我想用谓词对此向量进行部分排序
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
任何建议?
答案 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*/);