我需要使用堆,所以我搜索有關STL的一個,但它似乎沒有工作,我寫了一些代碼來說明我的意思:C++ STL make_heap和pop_heap不工作
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
struct data
{
int indice;
int tamanho;
};
bool comparator2(const data* a, const data* b)
{
return (a->tamanho < b->tamanho);
}
int main()
{
std::vector<data*> mesas;
data x1, x2, x3, x4, x5;
x1.indice = 1;
x1.tamanho = 3;
x2.indice = 2;
x2.tamanho = 5;
x3.indice = 3;
x3.tamanho = 2;
x4.indice = 4;
x4.tamanho = 6;
x5.indice = 5;
x5.tamanho = 4;
mesas.push_back(&x1);
mesas.push_back(&x2);
mesas.push_back(&x3);
mesas.push_back(&x4);
mesas.push_back(&x5);
make_heap(mesas.begin(), mesas.end(), comparator2);
for(int i = 0 ; i < 5 ; i++)
{
data* mesa = mesas.front();
pop_heap(mesas.begin(),mesas.end());
mesas.pop_back();
printf("%d, %d\n", mesa->indice, mesa->tamanho);
}
return 0;
};
,這就是我得到:
4, 6
2, 5
1, 3
3, 2
5, 4
所以它不工作作爲一個堆,因爲沒有被返回的向量的最大元素權利。
或者我做錯了什麼?
定義你的意思堆。 Sounfs有點像一套是你正在尋找的。如果多個對象具有相同的值multiset – 2010-05-11 21:50:11