C ++ STL - make_heap,其中pair <int,string>为数据类型</int,string>

时间:2012-11-02 06:15:01

标签: c++ heap

我知道堆是如何工作的以及它如何安排最小和最大元素。如果向量仅包含int,则很容易在STL中应用make_heap。但是如果vector包含string和int的结构,如何应用make_heap()。我希望根据结构中的int值来构建堆。 请告诉我怎么做。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:7)

是的,您可以直接将std::make_heapstd::pair<int, std::string>一起使用,因为std::pair具有所需的小于比较operator<。在上面链接的引用中甚至有一个例子,使用std::pair的特定实例。