我知道堆是如何工作的以及它如何排列最小和最大元素。如果 vector 仅包含 ,则很容易int
在 STL 中应用 make_heap。make_heap()
但是如果vector包含string和int的结构,如何应用。我想根据int
结构中的值制作堆。请告诉我该怎么做。
问问题
9043 次
2 回答
9
您必须为您的结构提供比较功能:
struct A
{
int x, y;
};
struct Comp
{
bool operator()(const A& s1, const A& s2)
{
return s1.x < s2.x && s1.y == s2.y;
}
};
std::vector<A> vec;
std::make_heap(vec.begin(), vec.end(), Comp());
于 2012-11-02T06:19:02.597 回答
7
是的,您可以直接使用std::make_heap
withstd::pair<int, std::string>
因为std::pair
具有所需的小于比较operator<
。上面链接的参考文献中甚至还有一个使用std::pair
.
于 2012-11-02T06:48:32.503 回答