如何保留第二个元素排序的对的优先级队列?

时间:2014-10-08 20:46:03

标签: c++ c++11

假设我们有一个优先级队列,例如:

priority_queue<pair<int, int> > pQ;

我们希望对pQ进行排序,以便具有最小第二个元素的对总是第一个。有没有一种简单的方法可以使用C ++ 11实现这一目标?如果我有一个优雅的解决方案,例如使用lambda函数的解决方案,那将是理想的选择。这可能吗?

3 个答案:

答案 0 :(得分:2)

您需要使用自定义比较函数对其进行实例化,例如(假定名称空间std):

auto cmp = [](const pair<int, int>& lhs, const pair<int, int>& rhs)
{
  return lhs.second < rhs.second;
};

priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> pQ(cmp);

答案 1 :(得分:0)

是的,这是可能的。 std::priority_queue有一个模板Compare仿函数,用于排序。你可以使用lambda作为c ++ 11中的函子。

答案 2 :(得分:0)

auto cmp = [](对a,对b){return a.second> b.second;}; priority_queue,vector>,decltype(cmp)> pq(cmp);

这是线对中第二个元素对的最小堆。