【发布时间】:2016-12-08 08:26:12
【问题描述】:
我想知道一种获取(Map + min-Heap)数据结构的简单方法 在 C++ 中
我试过了:
struct Comp
{
bool operator()(const pair<int,int>& y , const pair<int,int>& z)
{
return (y.second < z.second);
}
};
priority_queue< pair<int,int> , map<int,int> , Comp > p;
现在我面临的问题是重新初始化,因为它在 priority_queue 中,我们不能像使用 maps 那样简单地初始化。
插入元素的唯一方法是
p.push(make_pair(value1,value2));
我也尝试使用简单的映射而不是使用 priority_queue,但问题再次是当我尝试使用 min_element 查找最小元素时,它返回值而不是这里也需要的键。
请提出解决问题的最快方法。 我也相信有一些超出我知识范围的方法。
【问题讨论】:
-
priority_queue的第二个参数“必须满足SequenceContainer的要求,它的迭代器必须满足RandomAccessIterator的要求。另外,它必须提供以下具有通常语义的函数:front() push_back () pop_back()" --en.cppreference.com/w/cpp/container/priority_queue 。std::map不符合这些要求。 -
如果你在做 dijkstra 那么你确实需要一个最小堆(priority_queue)。这是地图无法做到的。让它使用默认的底层类型(向量)。
-
您不需要索引。您想要从 top/pop 获得的最小值
-
并注意虽然它不是优先级队列,但常规(有序)映射强制堆不变,并且可以使用
std::begin(my_map)获得其最小值 -
我不太明白你想要达到什么目的。对于 Dijkstra 来说,一个常规的优先级队列就足够了,你想如何优化它?
标签: c++ dictionary data-structures stl heap