2012-03-19 115 views
0

我想构造三个不同的priority_queue的持有类Thing,然后按Thing持有的值不同的排序每个。我知道我可以在内部定义一个运算符方法,也可以定义一个对象的朋友,但是有没有办法让它使用不同的测试方法?我如何告诉它使用该方法而不是操作员方法?参数列表与创建运算符过载有什么不同?std :: priority_queue不同的比较

回答

2

与大多数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; 
+0

我该如何做前言。你能指出一些解释这个(写,使用)的文档吗? – gardian06 2012-03-19 04:16:55

+0

该方法必须是它自己的类/结构,还是它可以是一个成员函数,类似于成员操作符<(const Thing&_t2)。 – gardian06 2012-03-19 04:38:09

+0

visual studio引发操作符必须是非静态的,并且让我定义了一个操作符 – gardian06 2012-03-19 06:15:51

0

您可以传递将使用的自定义比较器类型,而不是默认值。这是priority_queue的模板参数。

+0

我该如何做前言。你能指出一些解释这个(写,使用)的文档 – gardian06 2012-03-19 04:15:30

0

定义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;