代码之家  ›  专栏  ›  技术社区  ›  Christian

std::priority_queue:不定义比较器类的自定义排序

  •  4
  • Christian  · 技术社区  · 14 年前

    我想有一个具有自定义排序的优先级队列,但是尽管我很懒,我不想定义一个实现operator()的比较器类。

    我真的很想这样编译:

    std::priority_queue<int, std::vector<int>, 
        boost::bind(some_function, _1, _2, obj1, obj2)> queue;
    

    其中有些_函数是一个bool返回函数,它有四个参数,第一个和第二个是队列的整数,最后两个是计算排序所需的一些对象(const引用)。

    (错误:boost::bind不能出现在常量表达式中)

    但这并不能编译。更简单的

    std::priority_queue<int, std::vector<int>, &compare> queue;
    

    不会编译,因为compare是返回bool的二进制函数。

    (错误:模板类std::priority_queue的模板参数列表中参数3处的类型/值不匹配;应为类型,get compare)

    有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  11
  •   Steve M    14 年前

    这可能奏效:

    std::priority_queue<int, std::vector<int>, 
        boost::function<bool(int,int)> >
    

    然后将绑定表达式传递给队列的构造函数。

    P、 因为你把运行时计算的表达式放在需要类型名或常量表达式的地方,所以你会得到那些编译错误。