class 中 priority_queue 对象的自定义比较器
Custom comparer for priority_queue object in a class
我有一个 class 结构类似于以下骨架代码。
class custom
{
private:
struct info
{
// define some stuff
};
std::priority_queue<info, vector<info>, custom_comparer_t> pq;
}
我想知道是否有一个标准来定义这种情况下的 custom_comparer_t
?最好是使用 lambda 函数、仿函数,还是重载 info
中的 <
或 >
运算符?
std::priority_queue
模板参数根据 cppreference:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
std::priority_queue
的Compare
模板参数必须满足Compare概念要求。 std::priority_queue
无法使用 T::operator()()
因为:
- 它会破坏其他 STL
<algorithm>
函数。
T
可以是 POD 类型或用户定义的类型,结果将是 std::priority_queue
. 的复杂实现
当然,你可以为 Compare
使用仿函数:
class custom {
private:
struct info {
// define some stuff
bool operator()(info const&, info const&) const {
return false;
}
};
private:
using custom_comparer_t = info;
std::priority_queue<info, std::vector<info>, custom_comparer_t> pq;
};
我有一个 class 结构类似于以下骨架代码。
class custom
{
private:
struct info
{
// define some stuff
};
std::priority_queue<info, vector<info>, custom_comparer_t> pq;
}
我想知道是否有一个标准来定义这种情况下的 custom_comparer_t
?最好是使用 lambda 函数、仿函数,还是重载 info
中的 <
或 >
运算符?
std::priority_queue
模板参数根据 cppreference:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
std::priority_queue
的Compare
模板参数必须满足Compare概念要求。 std::priority_queue
无法使用 T::operator()()
因为:
- 它会破坏其他 STL
<algorithm>
函数。 T
可以是 POD 类型或用户定义的类型,结果将是std::priority_queue
. 的复杂实现
当然,你可以为 Compare
使用仿函数:
class custom {
private:
struct info {
// define some stuff
bool operator()(info const&, info const&) const {
return false;
}
};
private:
using custom_comparer_t = info;
std::priority_queue<info, std::vector<info>, custom_comparer_t> pq;
};