gpt4 book ai didi

c++ - 用于排序的多态STL比较函数(class cmp class, class cmp int)

转载 作者:行者123 更新时间:2023-11-30 04:37:23 25 4
gpt4 key购买 nike

我正在实现一个游戏。我有一个状态树和一个基于 set<> 的优先级队列,用于根据成本对状态进行排序。为此,我将 < 运算符实现为:

struct DereferenceCompareState : 
public std::binary_function<State*, State*, bool>
{

bool operator()(const State* lhs, const State* rhs) const
{
verbose6("comparing " << lhs->getCost() << " with " << rhs->getCost());
return lhs->getCost() < rhs->getCost();
}

};

现在,我想消除成本高于某个数字的状态,但为此,我必须创建一个具有我想要的成本的虚拟状态,并对集合执行 upper_bound。有没有办法通过例如添加到上面的结构来定义一个用于状态与整数比较的运算符?谢谢

最佳答案

您可以轻松地为 struct DereferenceCompareState 添加更灵活的比较能力通过重载 operator()更多,但这对您的尝试没有帮助。你遇到的真正问题是 std::set<T,Cmp>::upper_bound()仅将键/值类型 (T) 作为参数。所以无论你对你的比较类型做什么,你都不能调用s.upper_bound(5);。最好的办法可能就是像您描述的那样使用临时状态对象。

关于c++ - 用于排序的多态STL比较函数(class cmp class, class cmp int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835439/

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