当前位置: 首页 > 知识库问答 >
问题:

使用lambda比较初始化优先级队列的方法

束俊英
2023-03-14

我试图初始化一个自定义优先级队列,它作为成员对象存在于类中。它接受一个元组并使用lambda函数作为比较器。

我尝试了一些不同的方法来设置这个问题,但似乎在不同的协议下都失败了,

中,使用此处。h我拥有的文件:

 typedef std::tuple<trainz*,R_linez*,float> train_tuple;

auto tup_cmp =[](train_tuple lhs, train_tuple rhs)
  {
    return std::get<2>(lhs) < std::get<2>(rhs);
  };

using P_que_trainz = std::priority_queue<train_tuple,std::vector<train_tuple>,decltype(tup_cmp)>;

class usedhere{
private : 
P_que_trainz trainLine_que(tup_cmp);
};

这给了:

错误:“tup\u cmp”不是类型

如果我只是做P_que_trainz trainLine_que P_que_trainz trainLine_que(tup_cmp)

如果我将lambda移动到类声明内部,如下所示:

class usedhere
{
 private : 
 auto tup_cmp =[](train_tuple lhs, train_tuple rhs) ... etc
};

然后我得到

头中不允许使用auto

如果我把private:P_que_trainz trainLine_que() ,我明白了

错误:无效使用成员函数.你忘记'()'了吗

当后来我尝试在函数中使用它时,比如在中,无效使用她e::dispatchTrain(){... for(size_ti=0; i

我肯定我只是错过了一个简单的顺序。但是我没有想法去实验。


共有1个答案

澹台文博
2023-03-14

trainLine_que是一个成员变量,因此只需创建一个构造函数,通过以下方式初始化它:

class usedhere {

public:
    usedhere() : trainLine_que(tup_cmp) {}

private:
    P_que_trainz trainLine_que;

};
 类似资料:
  • 假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?

  • 有人能解释一下这里使用的比较运算符的语法吗?它是做什么的

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • priority_queue,comparator(query,d)>min_heap; main.cpp:20:7:注意:“comparator”不是文字,因为: class comparator{ main.cpp:20:7:注意:“comparator”不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的constexpr构造函数 Main.cpp:92:65:注意:应为类型,但

  • 我对Java中优先级队列初始容量的使用感到困惑。如官方文档所示,有一个以初始容量为参数的构造函数。但是当我用构造函数指定初始容量并开始将整数放入其中时,优先级队列的大小会大于初始容量。 例如,我将一个PQ的初始容量指定为3,并将10个不同的数字放入其中,这样我就可以得到第三个最小的数字,但结果发现那个队列中有10个数字。要处理这一点,我总是要手动移除一些数字,所以我想知道初始容量是如何工作的,或者

  • 我在Java使用PriorityQueue。 我有一个结构如下的对象: 优先考虑的是从最便宜到最贵的成本: 我使用add将对象包含在队列中。 它适用于队列中的每个元素,但我添加的最后一个元素总是位于底部。 我做错了什么?