如何解决如何使用函数对象作为自定义比较器来访问局部变量而不是在 C++ 中使用 lambda 函数?
我正在尝试学习 C++ 中的 priority_queue 概念,我遇到了这个面试问题。虽然,我设法用 lambda 函数解决了这个问题,但我无法弄清楚如何使用自定义比较器作为函数对象(我认为它被称为“函子”)进行相同的操作
我真的很难通过函数对象访问“freq”变量。是否可以使用函数对象来做到这一点?如果可能,我该怎么做?
class Solution {
public:
vector<string> topKFrequent(vector<string>& words,int k) {
unordered_map<string,int> freq;
for (const auto &word : words) {
freq[word]++;
}
auto compare = [&freq](const auto &left,const auto &right)
{
if (freq[left] < freq[right]) {
return true;
} else if (freq[left] > freq[right]) {
return false;
}
return left > right;
};
priority_queue<string,vector<string>,decltype(compare)> PQ(compare);
for (const auto &iter : freq) {
PQ.push(iter.first);
}
vector<string> result;
while (k--) {
result.push_back(PQ.top());
PQ.pop();
}
return result;
}
};
解决方法
你可以像这样显式地创建一个对象:
struct // no need to name the type
{
unordered_map<string,int> &freq; // store variable by reference
// write operator()
bool operator()(const string &left,const string &right) const
{
if (freq[left] < freq[right]) {
return true;
} else if (freq[left] > freq[right]) {
return false;
}
return left > right;
}
} compare{freq}; // capture freq by reference
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。