2012-11-02 59 views
2

我知道堆是如何工作的以及它如何排列最小和最大元素。如果vector僅包含int,則很容易在STL中應用make_heap。但如果向量包含字符串和int結構,如何應用make_heap()。我想根據int的值來構造堆。 請告訴我該怎麼做。C++ STL - make_heap with pair <int,string> as data type

+3

你有什麼試過?特別是,你是否嘗試給出一個明確的比較函數? – rici

+0

我不知道如何處理比較的樂趣... –

+1

自從我看了一段時間以來,已經有一段時間了,但是'pair'不是按照你想要的順序來做的嗎? – Hurkyl

回答

8

你必須爲你的結構提供比較函數:

struct A 
{ 
int x, y; 
}; 

struct Comp 
{ 
    bool operator()(const A& s1, const A& s2) 
    { 
     return s1.x < s2.x && s1.y == s2.y; 
    } 
}; 

std::vector<A> vec; 
std::make_heap(vec.begin(), vec.end(), Comp()); 
+0

爲什麼比較器中的第二個條件('s1.y == s2.y')? – jogojapan

+0

它只是一個例子,不關心比較邏輯 –

+0

我不認爲比較函數有任何需要,除非你想指定你自己的邏輯。如果您想要進行字典比較,只需使用默認值即可。 – juanchopanza

相關問題