某處仔細閱讀以下聲明:如何實現對最小堆O(1)刪除與哈希表
另外一個哈希表可以用來做刪除快 最小堆。
問題>如何結合priority_queue
和unordered_map
以便我可以實現上面的想法?
#include <queue>
#include <unordered_map>
#include <iostream>
#include <list>
using namespace std;
struct Age
{
Age(int age) : m_age(age) {}
int m_age;
};
// Hash function for Age
class HashAge {
public:
const size_t operator()(const Age &a) const {
return hash<int>()(a.m_age);
}
};
struct AgeGreater
{
bool operator()(const Age& lhs, const Age& rhs) const {
return lhs.m_age < rhs.m_age;
}
};
int main()
{
priority_queue<Age, list<Age>, AgeGreater> min_heap; // doesn't work
//priority_queue<Age, vector<Age>, AgeGreater> min_heap;
// Is this the right way to do it?
unordered_map<Age, list<Age>::iterator, HashAge > hashTable;
}
問題>我不能夠做了以下工作:
priority_queue<Age, list<Age>, AgeGreater> min_heap; // doesn't work
我必須使用列表作爲容器B/C列表的迭代器不受插入/缺失(Iterator invalidation rules )
我想我想知道爲什麼你使用優先級隊列來實現最小堆,因爲我習慣於以相反的方式。 –
你在哪裏讀到這個? –
「可以使用額外的散列表來快速刪除最小堆中的內容。」雖然這可能是也可能不是真的,但這個陳述並沒有特別提到'priority_queue'和'unordered_map',我認真地懷疑它們可以以任何有效的方式一起使用,更不用說評論所討論的方式。 –