2011-05-15 78 views
3

有一个pair如何指定对比较?

pair <string, int> myPair; 

myPair对象的vector。我需要使用make_heap对第二个值pair(即整数)将其转换为最小堆。我怎样才能做到这一点?我不确定如何定义比较操作。

I know I need something like this for heap to operate. But not sure where to put it: 

bool operator< (const Pair& p1, const Pair& p2) const 
{ 
    return p1.second < p2.second; 
} 
+2

你尝试过什么?比较操作通常只是一个简单的函数,只需要两对参数,然后返回通常的<0 0 > 0- – 2011-05-15 22:20:36

+0

不,不是'运算符<',而是一个可以像函数那样调用的结构。请参阅我的答案。 – Xeo 2011-05-15 22:30:56

回答

8

好,make_heap有需要一个额外的比较操作,洙过载...

// somewhere in global namespace 
typedef std::pair<std::string, int> myPair_type; 

struct mypair_comp{ 
    bool operator()(myPair_type const& lhs, myPair_type const& rhs){ 
    return lhs.second < rhs.second; 
    } 
}; 

// somewhere at your callside 
make_heap(first,last,mypair_comp()); 
+1

尽管lhs&rhs参数需要是某种类型,但是,myPair应该是typedef(而不是变量),或者应该创建一些typedef。 – 2011-05-15 22:23:21

+0

@约翰Zwinck:Woops,完全看到作为一个typedef,大声笑..编辑。 :) – Xeo 2011-05-15 22:23:48