这个优先队列用heap实现,代码改编自CLRS(算法导论)。 #define left(i) ((i) << 1)#define right(i) (((i) << 1) + 1)#define parent(i) ((i) >> 1)#define swap(a, b) {T t = a; a = b; b = t;}//测试用的结构体struct test...{ int key; string data; test(int k, string d) : key(k), data(d) ...{} test() ...{} //这个很重要 bool operator< (const test& b) const ...{ return (key < b.key); }};//优先队列的模板(最小优先队列)//用堆实现//insert(T)插入类型为T的元素//extract 返回类型为T的最小元素,并删除//empty bool型,返回是否空template <typename T>class pri_queue...{private: T* A; int size; void heapify(int i) ...{ int smallest = i, l = left(i), r = right(i); if (l <= size && A[l] < A[i]) smallest = l; if (r <= size && A[r] < A[smallest]) smallest = r; if (i != smallest) ...{ swap(A[i], A[smallest]); heapify(smallest); } }public: pri_queue(int len) : size(0), A(new T[len+1]) ...{} inline bool empty() ...{ return (size == 0); } inline T extract() ...{ T min = A[1];; A[1] = A[size--]; heapify(1); return min; } inline void insert(const T& key) ...{ A[++size] = key; int i = size; while (i > 1 && A[i] < A[parent(i)]) ...{ swap(A[i], A[parent(i)]); i >>= 1; } } inline T min() ...{ return A[1]; }};