【发布时间】:2018-12-17 10:35:52
【问题描述】:
我有一个由名字和年龄组成的结构。我想要的是有一个 unordered_map,它将一个字符串作为它的键,然后是一个 map 或一个 priority_queue,然后存储给定字符串的年龄: 我有一个包含姓名和年龄的结构。我想使用 unordered_map 将字符串名称作为键,priority_queue(最小堆)存储按年龄排序的猫。我在编写比较器时遇到问题。
有人可以帮我使用比较器吗(comp 下面)?
#include <iostream>
#include <unordered_map>
#include <queue>
using namespace std;
struct Cat{
string name;
int age;
Cat(string nm, int a) : name(nm), age(a) {}
};
auto comp = [] (const Cat &a, const Cat &b) {
return a.age > b.age;
};
int main()
{
cout<<"Hello World";
unordered_map<string, priority_queue<Cat,vector<Cat>, decltype(comp)> mp;
Cat c = new Cat("Bobby", 1);
mp[c.name].push(c);
return 0;
}
它现在正在工作。详情见下文。 :)
#include <iostream>
#include <unordered_map>
#include <queue>
using namespace std;
class Cat{
public:
string name;
int age;
Cat(string nm, int a) : name(nm), age(a) {}
};
//auto comp = [] (const Cat &a, const Cat &b) { return a.age > b.age; };
class comp
{public:
bool operator() (Cat const &a, Cat const &b) { return a.age < b.age; }
};
int main()
{
priority_queue<Cat,vector<Cat>, comp> q ;
unordered_map<string, priority_queue<Cat,vector<Cat>, comp > >mp ;
Cat c("Bobby", 1);
Cat* pt = new Cat("Bobby", 3);
Cat d("Bobby", 2);
mp[pt->name].push(*pt);
mp[d.name].push(d);
mp[c.name].push(c);
while (!mp["Bobby"].empty()) {
Cat t = mp["Bobby"].top();
cout << "name = " << t.name << " age = " << t.age << endl;
mp["Bobby"].pop();
}
return 0;
}
【问题讨论】:
-
你能告诉我们你是如何定义
comp的吗? -
您需要两个不同的比较器 - 一个用于优先级队列,另一个用于无序映射。
-
@Archinde 更新!
-
@1201ProgramAlarm unordered_map 是一个哈希图,对吧?如何添加不同的比较器?
-
name存储在Cat中是否与在map中用作key的string一样?
标签: c++ comparator priority-queue