std :: priority_queue不同的比较
问题描述:
我想构造三个不同的priority_queue
的持有类Thing
,然后按Thing
持有的值不同的排序每个。我知道我可以在内部定义一个运算符方法,也可以定义一个对象的朋友,但是有没有办法让它使用不同的测试方法?我如何告诉它使用该方法而不是操作员方法?参数列表与创建运算符过载有什么不同?std :: priority_queue不同的比较
答
与大多数STL容器一样,priority_queue
接受Compare class in its template arguments。
struct MyCompare1 {
bool operator()(const Thing& t1, const Thing& t2) {
// your logic here
}
};
std::priority_queue<Thing, std::vector<Thing>, MyCompare1> my_queue;
答
您可以传递将使用的自定义比较器类型,而不是默认值。这是priority_queue
的模板参数。
+0
我该如何做前言。你能指出一些解释这个(写,使用)的文档 – gardian06 2012-03-19 04:15:30
答
定义priority_queue时,可以指定比较函数作为第三个参数。请注意,第二个参数是基础容器类型,通常为std::vector
。
std::priority_queue<Thing> pq1;
std::priority_queue<Thing, std::vector<Thing>, std::greater<Thing> > pq2;
std::priority_queue<Thing, std::vector<Thing>, [your comparator here] > pq3;
我该如何做前言。你能指出一些解释这个(写,使用)的文档吗? – gardian06 2012-03-19 04:16:55
该方法必须是它自己的类/结构,还是它可以是一个成员函数,类似于成员操作符 gardian06 2012-03-19 04:38:09
visual studio引发操作符必须是非静态的,并且让我定义了一个操作符 – gardian06 2012-03-19 06:15:51