gpt4 book ai didi

c++ - 如何初始化一个以priority_queue为值的map与priority_queue的比较对象?

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:44 25 4
gpt4 key购买 nike

我想做的是有一个映射,将整数键映射到指向我定义的结构的指针的 priority_queues,并按我也定义的比较函数排序。

也就是说,类型应该是这样的,

map<int, priority_queue<object_t*, compare> > my_map;

您可以假设 object_t 是我定义的结构,而 compare 是一个返回 bool 值的比较函数。

有没有一种方法可以声明 my_map 以使用比较函数初始化 priority_queues?例如,我是否可以声明它以便我可以执行以下操作,

my_map[1].push(object_ptr);
my_map[1].push(object_ptr1);

并相信这两个对象指针已在 priority_queue 中正确排序?

谢谢

最佳答案

什么是“比较”?如果它是一个函数指针,你必须非常小心,在你提供一个值之前不要使用它,因为默认构造的 priority_queue 将使用一个空指针。具有讽刺意味的是,确保非空指针的最简单方法——如果你不能如下所示重写或换行——永远不要使用索引运算符;而是使用查找和插入方法。

如果“compare”是一个仿函数,那么它应该被写成它的默认构造完全满足需要(通常什么都不做)——这是不可能的,这是非常罕见的。

一旦 priority_queue 中的比较器具有正确的值(例如,在指针情况下不是空指针),那么您可以确定您的对象将被正确排序。


如果你有一个固定的函数并且正在使用函数指针:

bool my_compare(object_t *a, object_t *b) {
// do something
}
typedef bool (*compare)(object_t*, object_t*);

重写为:

struct compare {
bool operator()(object_t *a, object_t *b) {
// do something
}
};

如果您不能将函数重写为比较器(例如,它来自某些第三方库),您可以将(固定的)函数指针包装在比较器中:

bool my_compare(object_t*, object_t*);
struct compare {
bool operator()(object_t *a, object_t *b) {
return my_compare(a, b);
}
};

关于c++ - 如何初始化一个以priority_queue为值的map与priority_queue的比较对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com