比较在C 中的功能
the Comparison Functions in C++
我当前正在C 中学习STL。我一直在研究正在编码的程序中的参考。它使用自定义对象使用优先队列。
struct Foo
{
std::list<int> path;
int cost;
bool operator>(const Foo& rhs) const
{
return cost > rhs.cost;
}
};
class mycomparison
{
public:
bool operator() (Foo p1, Foo p2) const{
return (p1>p2);
}
};
priority_queue<Foo,vector<Foo>,mycomparison> myPQ;
对于成本较低的对象,优先级队列中的对象优先考虑。我知道您能够定义自定义比较器。但是我不确定为什么结构中有一个超载的运算符,而在类MyComparison中的自定义操作员则在优先级队列中使用。如果我删除了结构中的超载操作员,则拒绝运行。
如果有人会向我解释两种代码,关系,它如何影响彼此,这将不胜感激!
谢谢。
std::priority_queue
使用 std::less<T>
作为默认比较器。
如果在不合适的情况下,如您的情况,您必须定义自定义比较器或使用适合您需要的另一个比较器。
比较器的operator()
功能的实现详细信息完全取决于您。
您需要Foo
中的operator>
功能吗?当然不是。您可以使用:
class mycomparison
{
public:
bool operator() (Foo p1, Foo p2) const{
return (p1.cost > p2.cost);
}
};
可能已经消除了实现Foo::operator>
的需求。
但是,使用return (p1 > p2)
将抽象保持在正确的位置。p1 > p2
含义的详细信息最好保留到Foo
。
顺便说一句,您可以使用:
std::priority_queue<Foo, std::vector<Foo>, std::greater<Foo>> myPQ;
那将使mycomparison
不必要。
相关文章:
- 优先级队列功能比较
- 不正确的比较和交换计数器输出用于快速排序功能
- 如何改进我的"String"对象比较功能
- 使用不遵循"严格弱排序"的比较功能对列表进行排序
- 如何在C++中使用自定义比较功能对字符串进行排序?
- Qsort和不兼容的比较器功能 - C++
- 如何比较C 中的两个字符串并使用默认功能
- 比较在C 中的功能
- 标准::地图比较功能
- C++ lower_bound比较功能问题
- C 比较类中的功能奇怪的行为
- 如何准确测量和比较opencl速度以实现循环功能的简单速度
- std::set 比较器功能如何工作?
- 自定义stable_sort比较功能
- 带有额外参数的排序列表以进行比较功能
- 使用自定义比较功能设置相等性
- 相同的比较功能为C++中的排序和优先级队列提供不同的输出
- C - 如何正确地将比较器传递到STL功能
- 功能比较器可以是静态功能
- 检查功能比较问题