作者a29831968 (yeah is you)
看板C_and_CPP
标题[问题] C++ 如何修改compare
时间Thu Apr 18 18:17:44 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
不好意思,我是在刷题的时候遇到问题
可能关键字下错所以一直找不太到答案,所以想在这里求助大神
一般来说
定义 priority_queue<>时,第三个参数放的是compare
在刷题时,模板是这样子
class solution{
// 里面会有题目自订的funciton
// 若是我在题目内宣告priority_queue,且要用到符合需求的compare时,
// 我会在该class外面自行定义
vector<int> mergeTwoSortedArray(vector<int> a, vector<int> b) {
// 随便假设
priority_queue<int, vector<int>, compare> pq;
}
};
// ex
class compare{
bool operator()(const int &a, const int &b) {
return a > b;
}
};
可是我现在需要在class solution题目给的function内去更改compare,
因为我需要使用到题目给的input,不单单只是整数,说不定要用到a的size之类的(假设)
补充说明(Supplement):
抱歉,第一次发文,若有什麽不妥或不符合规定请告知,会改进
谢谢各位的帮忙。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.134.69
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1555582666.A.B38.html
2F:→ a29831968: Thank you so much! 等等下班试试04/18 18:54
https://i.imgur.com/iP93jph.jpg
有点奇怪,我不觉得有写的不一样
※ 编辑: a29831968 (42.73.37.77), 04/18/2019 22:51:16
3F:→ loveme00835: 当然有不一样, template 接收的只有 type/non-type 04/18 23:28
4F:→ loveme00835: argument, 你给一个 runtime 才能建立的 object 当然 04/18 23:29
5F:→ loveme00835: 编不过 04/18 23:29
6F:推 mmmmei: Ctor的第三个参数传class的名字 不是method 04/19 03:51
7F:推 LPH66: 应该说你不能传成员函式进去 (因为成员函式有隐藏的 this) 04/19 07:29
8F:→ wawi2: Comparator 04/19 11:22
9F:推 xavier13540: std::priority_queue的第三个模板参数是定义小於的 04/19 16:09
10F:→ xavier13540: typename 要先生出这个typename的instance才能比较 04/19 16:11
11F:→ xavier13540: 做法就是把这个typename的ctor的参数作为std:: 04/19 16:12
12F:→ xavier13540: priority_queue的ctor的参数 04/19 16:12
13F:→ xavier13540: 以你的例子来说就是 priority_queue<pair<int, int>, 04/19 16:16
14F:→ xavier13540: vector<pair<int, int>>, compare> pq(intervals); 04/19 16:17
15F:推 xavier13540: 抱歉 我查了一下没有这种用法 看来还是用lambda好了 04/19 16:24
16F:→ xavier13540: 把上面的pq(intervals)改成pq(compare(intervals)) 04/19 16:26
17F:→ adrianshum: 要传成员函式请爱用bind 04/21 19:00