我正在尝试为std::proirity\u队列实现我自己的密钥比较器,如下所示:
funtion insertInPQ(vector<int> nums){
map<int,int> m;
for(int i=0;i<nums.size();i++)
m[nums[i]]++;
auto comp = []( int a, int b )
{
return m[a] < m[b];
};
priority_queue<int, vector<int>, decltype(comp)> pq(comp);
for(auto it=m.begin();it!=m.end();it++)
pq.push(it->first);
}
但它的给出错误:
在lambda函数中:第10行:Char 23:错误:将“const std::map”作为“this”参数传递将丢弃限定符[-fppermissive]返回m[a]
我认为在你的lambda的上下文中,m是未知的。您必须将其作为捕获传递:
auto comp = [m]( int a, int b )
{
return m[a] < m[b];
};
如果lamdba错了,您需要比较这两个参数或捕获变量。
auto comp = []( int a, int b )
{
return a < b;
};
或:
auto comp = [m]( int a, int b )
{
return m[a] < m[b];
};
这取决于你到底想做什么。
首先,你的lambda捕获列表(方括号)是空的,我想应该有
[&m]
那里?
接下来,如果搜索std::map的操作符[],您会发现这只能在非常量映射上操作(https://en.cppreference.com/w/cpp/container/map/operator_at)。您的lambda可能会被常量映射调用。因此,请尝试使用
return m.at(a) < m.at(b);
这个问题最近在一次采访中被问到。 这是我使用的以下方法 1)创建一个最大堆priority_queue来存储最近的点
我想用Lambda对列表排序: 但我得到了这个编译错误:
问题内容: 我想用Lambda排序列表: 但是我得到了这个编译错误: 问题答案: 返回一个; 而显然是。 这样写会更好:
日安- 我正在处理一个任务,在该任务中,我有指令来创建一个名为的方法,该方法将执行以下任务: public int compare(Object first,Object second)(请注意,您还可以定义:public int compare(Attory first,Attory second),方法是让类 为此,我创建了一个类,如下所示: AthletenameComparator
问题内容: Comparable和Comparator之间的主要区别是什么。 在什么情况下,哪个比另一个优先? 问题答案: 当你的类实现时,该类的方法将定义该对象的“自然”顺序。根据合同,该方法有义务(尽管不要求)与该对象上的其他方法保持一致,例如,当比较返回true 时,应始终为对象返回0 。 一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象。 例如,字符串通
我仍在学习这方面的诀窍,但我正在尝试为HashMap实现一个比较器,以便使用compareTo对键进行排序。为了使比较器与equals保持一致,我想尝试从compareTo获取int结果,看看它是否等于0。如果是,请检查对象是否相等。我遇到的问题是,如果对象不相等,会发生什么?我必须归还什么?