c++哈希堆的实现

#include <iostream>
#include <utility>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>

using namespace std;

const int MAX_N = 1024;

int heap[MAX_N];
int tail = 0;

unordered_map<int, int> hash_map;

void push(int v) {
    int idx = tail++;
    while (idx > 0) {
        int p = (idx - 1) / 2;
        if (heap[p] <= v) {
            break;
        }
        heap[idx] = heap[p];

        hash_map[heap[idx]] = idx;

        idx = p;
    }
    heap[idx] = v;
    hash_map[heap[idx]] = idx;
}

int top() {
    return heap[0];
}

void pop(int p = 0) {
    int res = heap[p];
    int v = heap[--tail];
    int newp = p;
    while (newp * 2 + 1 < tail) {
        int mm = newp * 2 + 1, ma = mm + 1;
        if (ma < tail && heap[ma] < heap[mm]) {
            mm = ma;
        }
        if (heap[mm] > v) {
            break;
        }
        heap[newp] = heap[mm];
        hash_map[heap[newp]] = newp;
        newp = mm;
    }
    heap[newp] = v;
    hash_map[heap[newp]] = newp;
    heap[tail] = 0;
    hash_map.erase(res);
}

void hash_pop(int v) {
    int idx = hash_map[v];
    pop(idx);
}


int main() {
    for (int i = 0; i < 6; i++) {
        push(i);
    }
    hash_pop(4);
    cout << heap[0];
}


上一篇:堆元素插入


下一篇:#1155. Heap Paths【完全二叉树 + 堆 + DFS】