[英]How to make a comparator function inside any class just like we make in a priority_queue in c++ STL
就像在 STL 中的 priority_queue 中一样,我们可以像这样对 function 进行自定义比较:
class comp
{
bool operator()(int a, int b)
{
return a>b? 1:0;
}
};
priority_queue<int, vector<int>, comp> pq;
我该如何为任何 class 执行此操作? 我尝试这样做来比较我的人 class object 使用class c
:
class person
{
public:
int height;
int age;
person(int a, int h)
{
age = a;
height = h;
}
};
template<class comparator>
class c
{
public:
vector<person>p;
void compare(person p1, person p2)
{
if(comparator comp( p1, p2))
{
p.push_back(p1);
}
}
};
class compare
{
bool operator()(person p1, person p2)
{
return p1.height> p2.height ? 1:0;
}
};
and then I created 2 person
objects and a class c
object "pq", then called the compare
function like we do in priority_queue
:
person p1(23, 85);
person p2(11, 55);
c <compare> pq;
pq.compare(p1, p2);
但它给出了这个错误。
error: expected primary-expression before 'comp'
if(comparator comp(p1, p2))
^~~~
您需要创建一个要与之比较的仿函数实例,然后调用该实例的operator()
。
这个:
if(comparator comp( p1, p2))
不这样做。 您似乎只是试图在if
条件下构造一个名为comp
的comparator
- 这是无法完成的 - 然后实际上并没有努力调用所述comparator
。 将其更改为:
void compare(person p1, person p2)
{
if (comparator{}(p1, p2)) // fixed
{
p.push_back(p1);
}
}
即:先用{}
构造一个comparator
,然后用 () 调用它的operator()
()
。
反过来,这意味着您需要它的operator()
可以单独访问:
class compare
{
public: // added (or omit this and change class to struct)
bool operator()(person p1, person p2)
{
return p1.height> p2.height ? 1:0;
}
};
通过这些更改,它可以正常编译。 我没有检查它是否符合您的要求,但您显然需要先修复这些语法错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.