假设我们有一个优先级队列,例如:
priority_queue<pair<int, int> > pQ;
我们希望对pQ进行排序,以便具有最小第二个元素的对总是第一个。有没有一种简单的方法可以使用C ++ 11实现这一目标?如果我有一个优雅的解决方案,例如使用lambda函数的解决方案,那将是理想的选择。这可能吗?
答案 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);
这是线对中第二个元素对的最小堆。