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])的方式组合。

 

猜你喜欢

转载自www.cnblogs.com/aprincess/p/11621460.html