greater
Posted aprincess
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了greater相关的知识,希望对你有一定的参考价值。
在Dijkstra算法中,d[i]越小,应该越先出队,因此需要使用自定义比较器。在STL中, 可以用greater<int>表示“大于”运算符,因此可以用priority_queue<int, vector<int>, greater<int> >q来声明一个小整数先出队的优先队列。然而,除了需要最小的d值之外,还要找到这个最 小值对应的结点编号,所以需要把d值和编号“捆绑”成一个整体放到优先队列中,使得取出 最小d值的同时也会取出对应的结点编号。
STL中的pair便是专门把两个类型捆绑到一起的。为了方便起见,用typedef pair<int,int> pii自定义一个pii类型,则priority_queue<pii, vector<pii>, greater<pii> > q就定义了一个由二元 组构成的优先队列。pair定义了它自己的排序规则——先比较第一维,相等时才比较第二 维,因此需要按(d[i],i)而不是(i,d[i])的方式组合。
以上是关于greater的主要内容,如果未能解决你的问题,请参考以下文章
使用 `std::greater` 通过 `priority_queue` 创建最小堆的原因