比较priority_queue/stl中的函数


bool operator() (const pair<int,string>& a,const pair<int,string>& b){
if(a.first!=b.first)
return a.first>b.first;
else
return a.second < b.second;
}

我一直在做堆问题,发现了这个比较器函数,这里它的比较频率是2个单词,但我不知道它是如何工作的,也找不到任何合适的解释。有人能简单地解释一下吗?非常感谢。

比较函数首先按降序对int进行排序。如果两个比较的int相同,它将对string进行字典比较,并按升序排序。

示例,给定一个包含以下内容的容器:

std::vector<std::pair<int, std::string>> vec{
{1, "F"}, {2, "E"}, {3, "D"}, {4, "C"}, {5, "B"}, {6, "A"},
{1, "A"}, {2, "B"}, {3, "C"}, {4, "D"}, {5, "E"}, {6, "F"},
};

在比较函数中使用标准std::sort会产生以下顺序:

6 A
6 F
5 B
5 E
4 C
4 D
3 C
3 D
2 B
2 E
1 A
1 F

对于std::priority_queue,提取顺序将相反,因为它将最大值放在首位,并且比较函数表示较小的数字比较大的数字具有更高的优先级。

带有调试打印的演示

请注意,我在演示中使用了std::tie。当创建需要执行严格弱排序的比较函数时,它通常是首选,因为它可以更容易地避免出错。它和你原来的一样:

bool operator()(const std::pair<int, std::string>& a,
const std::pair<int, std::string>& b) 
{
return std::tie(b.first, a.second) < std::tie(a.first, b.second);
}

最新更新