自己在C++中实现堆 我必须编写C++中堆的实现,它存储类型:对象 std::pair<City, int>

自己在C++中实现堆 我必须编写C++中堆的实现,它存储类型:对象 std::pair<City, int>,c++,algorithm,heap,C++,Algorithm,Heap,其中City是存储两个整数的结构,表示城市坐标和字符串-城市名称。 我确实知道如何使用纯整数实现这一点,但使用一对值对我来说有点问题。 我已经开始编写我的heap类,但是,正如我所说的,我不知道如何使用这些对来完成这项工作。 我希望堆按对的int值排序。您可以尝试使用它将对的序列放入堆顺序,请参见此。要仅按int值排序,请使用一个C++11 lambda表达式来比较每对中的第二个元素 或者,假设您不能使用任何与STL堆相关的算法,但给定了 template<typename RandomI

其中City是存储两个整数的结构,表示城市坐标和字符串-城市名称。 我确实知道如何使用纯整数实现这一点,但使用一对值对我来说有点问题。 我已经开始编写我的heap类,但是,正如我所说的,我不知道如何使用这些对来完成这项工作。 我希望堆按对的int值排序。

您可以尝试使用它将对的序列放入堆顺序,请参见此。要仅按int值排序,请使用一个C++11 lambda表达式来比较每对中的第二个元素

或者,假设您不能使用任何与STL堆相关的算法,但给定了

template<typename RandomIt>
void my_make_heap(RandomIt first, RandomIt last)
{
     /* some algorithm using `a < b` to do comparisons */
}
您可以尝试使用它将成对的序列放入堆顺序,请参见。要仅按int值排序,请使用一个C++11 lambda表达式来比较每对中的第二个元素

或者,假设您不能使用任何与STL堆相关的算法,但给定了

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

如果你知道如何为ints做这件事,你就快到了。就像赋值时对待int一样对待pair对象,但出于比较的目的,请使用.second而不是直接使用值。

如果您知道如何处理int,就差不多了。正如赋值时对待int一样对待pair对象,但出于比较目的,请使用.second而不是直接使用值。

因此,据我所知:

你的结构是这样的

struct node
{
   int X_coord;
   int y_coord;
   string name;
}
您需要根据pair的int'值形成堆,称之为'x'

所以你的一对是

pair<node n , int x> ;
,是一个非常可读的堆代码,在类中实现

它可以很容易地修改为您的对值要求。
只需使用heap.second作为键值。

根据我的理解:

你的结构是这样的

struct node
{
   int X_coord;
   int y_coord;
   string name;
}
您需要根据pair的int'值形成堆,称之为'x'

所以你的一对是

pair<node n , int x> ;
,是一个非常可读的堆代码,在类中实现

它可以很容易地修改为您的对值要求。
只需使用heap.second作为您的键值。

请尝试更具体地回答您的问题。到底是什么问题?显示你试图编写的函数,并解释你遇到的问题。什么意思?Heap只提供了两个操作push和pop Min/Max,他没有排序。如果所有数据在开始时可用,那么堆就不必要了,尽管只是简单的排序。我认为你应该为这个类实现comparator操作符。试着更具体地回答你的问题。到底是什么问题?显示你试图编写的函数,并解释你遇到的问题。什么意思?Heap只提供了两个操作push和pop Min/Max,他没有排序。如果开始时所有数据都可用,那么heap就不必要了,尽管只是简单的排序。我认为你应该为这个类实现comparator运算符。.0:因为问题是从开始的,所以我必须编写自己的heap实现,很可能是一个家庭作业,这个答案并不是很有用。我不允许使用任何STL库。@user2342783:但你可以使用std::pair?@rhalbersma好吧,坚持几年,你就会有一代不知道如何实现堆的程序员。我完全赞成在生产中尽可能多地使用算法,但学校仍然应该在里面教授算法。程序员需要理解数据结构,如果没有其他东西的话,那么就能够创建自己的数据结构。@rhalbersma我当然不能一下子就把它编码好,但我在大学里仍然学到了原理和算法。我看到我们部门的人编写了相当一部分K-d树和其他空间分区结构的代码。教程序员编写这些代码并不是为了替换库,而是教程序员从算法角度思考数据结构,并对其进行推理。0:问题的起点是我必须自己编写堆的实现,这很可能是一项家庭作业,这个答案并不是很有用。我不允许使用任何STL库。@user2342783:但你可以使用std::pair?@rhalbersma好吧,坚持几年,你就会有一代不知道如何实现堆的程序员。我完全赞成在生产中尽可能多地使用算法,但学校仍然应该在里面教授算法。程序员需要理解数据结构,如果没有其他东西的话,那么就能够创建自己的数据结构。@rhalbersma我当然不能一下子就把它编码好,但我在大学里仍然学到了原理和算法。我看到我们部门的人编写了相当一部分K-d树和其他空间分区结构的代码。教授这些东西的代码并不是要取代库,而是要教程序员 o对数据结构进行算法思考和推理。