在c++中实现自己的堆
Own heap implementation in C++
我必须在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 "作为键值
相关文章:
- 如何使用ZeroMQ为协议缓冲区编写自己的RPC实现
- 在我自己的堆栈中实现top的问题
- 如何实现自己的生成器以与 std 发行版一起使用
- Qt - 重新实现QIODevice,实时听到我自己的声音
- 自己的C++列表类实现(插入函数)出现问题
- 如何自己为我自己的shared_ptr实现实现别名构造函数
- 如果不在派生类实现中执行此操作,"basic_streambuf"是否会创建自己的获取/放置区域?
- 如何将自己的链表实现从存储整数更改为存储个人数据
- 在 gcc 上自己的元组实现段错误,同时在 clang 中工作
- 智能指针的自我/自己的实现
- 在 C++ 中实现自己的字符串类
- count_if使用我自己的类实现第三个参数
- 试图用c++编写我自己的链表实现,在点击列表中的3个元素后编写segfault代码
- 通过我自己的实现从库中覆盖模板方法
- 实现我自己的获取线函数
- 如何在我自己的全系统模拟器上实现 GDB 调试
- 在OpenGL中实现自己的旋转功能
- 在自己的外壳C++中实现历史记录
- Make_shared - 自己的实现
- 库math.h使用fmod和自己的实现