2012-11-02 61 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

相关问题