使用数字数组 nums,我想按出现的频率对唯一数字进行排序。编译器抱怨传递 unordered_map 作为 'this' 参数丢弃限定符。我该如何解决?
void sortByFreq(const vector<int>& nums) {
unordered_map<int, int> counts;
for (auto i: nums) ++counts[i];
auto byCount = [counts](const int& a, const int& b) { return counts[a] > counts[b]; };
priority_queue<int, vector<int>, decltype(byCount)> minFreq(byCount);
for (auto& kv: counts) {
minFreq.push(kv.first);
}
......
}
为什么你有一个priority_queue
?看起来我们遗漏了一些信息。
有几种方法可以解决counts
lambda 和 lambda 的问题:
at
代替operator[]
- IMO最佳解决方案counts
按引用捕获根据您的描述,这应该可以完成工作:
vector<int> sortedByFreq(const vector<int>& nums)
{
unordered_map<int, int> counts;
for (auto i : nums)
++counts[i];
vector<int> result = nums;
std::sort(result.begin(), result.end(),
[counts](auto a, auto b) {
return counts.at(a) > counts.at(b);
});
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句