【发布时间】:2020-08-27 17:12:42
【问题描述】:
我正在尝试创建一个仿函数作为我的 priority_queue 的自定义比较器,它将 unordered_map 作为构造函数的参数。当我收到错误时,我不确定如何在声明 priority_queue 时调用仿函数:
"Line 22: Char 48: error: template argument for template type parameter must be a type
priority_queue
class compareWords{
public:
compareWords(unordered_map<string, int> &wordCounts): wordFreq(wordCounts){}
bool operator()(string word1, string word2){
if(wordFreq[word1] == wordFreq[word2]){
return word1 < word2;
}
return wordFreq[word1] < wordFreq[word2];
}
private:
unordered_map<string, int> wordFreq;
};
vector<string> topKFrequent(vector<string>& words, int k) {
vector<string> result;
unordered_map<string, int> wordFreq;
for(int i = 0; i < words.size(); i++){
wordFreq[words[i]]++;
}
priority_queue<string, vector<string>, compareWords(wordFreq)> pq;
for(auto& item: wordFreq){
pq.push(item.first);
}
for(int i = 0; i < k; i++){
result.push_back(pq.top());
pq.pop();
}
return result;
}
【问题讨论】:
标签: c++ priority-queue functor