gpt4 book ai didi

C++ STL : Using map with priority_queue

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:20 26 4
gpt4 key购买 nike

我正在尝试通过将字母及其对应值保存到映射中然后将该映射插入到优先级队列中来实现霍夫曼编码。当我尝试声明我的队列时出现参数转换错误。我到底应该把什么作为参数?我这里有的是我最好的猜测。

void main()
{
ifstream doc("doc.txt");
map<char, int> C;
char letter;
while(!doc.eof()){
doc.get(letter);
if(letter >= 'a' && letter <= 'z')
C[letter]++;
}
priority_queue<int, map<char,int>, greater<int> > Q(C); //also tried greater<map<char,int>>
/*map<char, int>::const_iterator it;
for(it = C.begin(); it != C.end(); it++)
cout<<it->first<<" "<<it->second<<endl;*/
}

我觉得问这个问题有点愚蠢,但彻底的谷歌搜索并没有给我答案。非常感谢您的帮助!

最佳答案

您不能将 map 用作 priority_queue 的底层容器:priority_queue 必须可以自由地对容器中的内容进行重新排序,而这对于 map 是不允许的。只能使用 vector 和 deque(来自标准容器)。

因此,容器类型类似于 vector<pair<char, int> > .然后,您需要一个 less/greater 操作,它只考虑该对的第二个字段。

关于C++ STL : Using map with priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4485203/

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