【发布时间】:2020-03-03 08:37:28
【问题描述】:
为什么当priority_queue 用于单一数据类型时,比如'int',我们这样初始化它:priority_queue<int>;但是,当它用一对初始化时,我们添加了第二个向量类型的参数priority_queue<pair<int,int>, vector<pair<int,int>>>?
另外,我注意到添加第三个参数指定排序的几种方法。
方法一 - 结构体
struct myCompare {
bool operator()(const pair<int, int>& A, const pair<int, int>& B) {
return A.second < B.second;
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, myCompare> leaderBoard;
方法 2 - Lambda
auto myComp = [](const pair<int, int>& A, const pair<int, int>& B)
{return A.second < B.second;};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(myComp)> leaderBoard(myComp);
我的问题
- 为什么
priority_queue的第二个参数是vector?这是什么意思?何时需要指定第二个参数? - 在方法 2 中,为什么这个 lambda 需要
decltype? - 在方法2中,为什么对象
leaderBoard需要初始化为(myComp) - 在方法 2 中,为什么不能直接将我的 lambda 指定为第三个参数?
-
A.second > B.second和A.second < B.second有什么区别?你怎么记得哪个是升序,哪个是降序?
【问题讨论】:
-
请,每个问题只问一个问题。
标签: c++ vector lambda priority-queue decltype