2011-05-15 77 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