我正在尝试使用heapsort对类哈希表的对象进行排序
struct hashmap{
int key;
int value; };
vector<hashmap> heap;
int n;
void heapify(int i)
{
int l,r,max=i;
l=2*i+1;
r=2*i+2;
if((heap[r].key>heap[max].key)||((heap[r].key=heap[max].key)&&(heap[r].value>heap[max].value)))
{
max=r;
}
else if((heap[l].key>heap[max].key)||((heap[l].key=heap[max].key)&&(heap[l].value>heap[max].value)))
{
max=l;
}
if(max!=i)
{
swap(heap[max],heap[i]);
heapify(max);
}
}
void heapsort()
{
for (int i=n/2-1;i>=0;i--)
heapify(i);
while(n>0)
{
swap(heap[n-1],heap[0]);
--n;
heapify(0);
}
}
int main()
{
cout<<"Enter the no of elements : ";
cin>>n;
Det(n);
heapsort();
display();
return 0;
}
如果我的输入是(1,3)(2,5)(1,2)我的预期输出应该是(1,2)(1,3)(2,5),但这不是我的意思我得到了一些随机数作为输出。
答案 0 :(得分:0)
假设您要先对键然后对值进行排序,则可以将std::sort与比较函数结合使用:
struct hashmap{
int key;
int value;
};
bool comp(const hashmap& a, const hashmap& b) {
return tie(a.key, a.value) < tie(b.key, b.value);
}
int main()
{
vector<hashmap> v{
{1, 3}
, {2, 5}
, {1, 2}
};
sort(v.begin(), v.end(), comp);
for (const auto& h : v) {
cout << '(' << h.key << ',' << h.value << ')';
}
cout << endl;
return 0;
}
答案 1 :(得分:0)
我认为您不需要在heapsort函数中进行while循环。像下面这样调用就足够了:
void heapsort()
{
for (int i=n/2-1;i>=0;i--)
heapify(i);
}