在c++中实现自己的堆

Own heap implementation in C++

本文关键字:自己的 实现 c++      更新时间:2023-10-16

我必须在c++中编写自己的堆实现,它存储类型为:

的对象
std::pair<City, int>

,其中City是存储两个整数的结构,分别表示城市坐标和字符串城市名称。我确实知道如何使用普通整数,但是使用一对值对我来说有点问题。我已经开始写堆类了,但是,正如我说的,我不知道如何处理这些对。

如果你知道如何为int s做这件事,你就快成功了。在赋值时处理pair对象就像处理int对象一样,但是为了比较,请使用.second而不是直接使用值。

您可以尝试使用std::make_heap,它将把您的对序列放入堆顺序中,参见这个在线示例。若要仅按int值排序,请使用c++ 11的lambda表达式,该表达式将比较每对

的第二个元素。

或者,如果您不能使用任何STL堆相关算法,但是给定任何自制的

实现
template<typename RandomIt>
void my_make_heap(RandomIt first, RandomIt last)
{
     /* some algorithm using `a < b` to do comparisons */
}

可以重写为(或添加重载)

template<typename RandomIt, typename Compare>
void my_make_heap(RandomIt first, RandomIt last, Compare, cmp)
{
     /* SAME algorithm, but now using `cmp(a, b)` to do comparisons */
}

,然后将其称为my_make_heap(first, last, int_cmp),其中lambda表达式比较像这样的对:

    typedef std::pair<City, int> Element;
    auto int_cmp = [](Element const& lhs, Element const& rhs) {
         return lhs.second < rhs.second;
    };

所以从我的理解来看:

你的结构是这样的,

struct node
{
   int X_coord;
   int y_coord;
   string name;
}

你需要根据pair的"int"值形成堆,称之为"x"。

所以你的对是

pair<node n , int x> ;

这是一个非常可读的Heap代码,在一个类中实现。

可以很容易地修改为您对pair<>值的要求。只需使用"堆"。Second "作为键值