gpt4 book ai didi

C++ priority_queue使用带有lambda比较器错误的 map

转载 作者:太空狗 更新时间:2023-10-29 21:31:53 24 4
gpt4 key购买 nike

我正在尝试为 std::proirity_queue 实现我自己的关键比较器,如下所示:

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 行:字符 23:错误:将“const std::map”作为“this”参数传递会丢弃限定符 [-fpermissive] 返回 m[a] < m[b];

最佳答案

首先,你的lambda捕获列表(方括号)是空的,我想应该有

[&m]

有吗?

接下来,如果你搜索 std::map 的 operator[],你会发现它只能对非常量映射 (https://en.cppreference.com/w/cpp/container/map/operator_at) 进行操作。您的 lambda 很可能是使用 const 映射调用的。所以尝试使用

return m.at(a) < m.at(b);

关于C++ priority_queue使用带有lambda比较器错误的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56704304/

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