我想要做的是有一个映射,它将整数键映射到指向我已定义的结构的指针的priority_queues,该结构由我也定义的比较函数排序。
也就是说,类型会是这样的,
map<int, priority_queue<object_t*, compare> > my_map;
你可以假设object_t是我定义的struct,而compare是一个返回布尔值的比较函数。
有没有办法可以声明my_map让priority_queues已经用比较函数初始化了?例如,我可以声明它以便我可以执行以下操作,
my_map[1].push(object_ptr);
my_map[1].push(object_ptr1);
并相信两个对象指针已在priority_queue中正确排序?
由于
答案 0 :(得分:0)
什么是“比较”?如果它是一个函数指针,在提供值之前必须非常小心不要使用它,因为默认构造的priority_queue将使用空指针。确保非空指针的最简单方法 - 如果你不能如下所示重写或换行 - 具有讽刺意味的是,永远不要使用索引运算符;而是使用find和insert方法。
如果“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);
}
};