while (index != 0) { if (!cmp(vec[parent(index)], vec[index])) { break; } // vec[index]返回的是元素的引用而不是拷贝 swap(vec[parent(index)], vec[index]); index = parent(index); } } voidshiftDown(size_t index){ int n = vec.size(); while (true) { size_t left = left_child(index); size_t right = right_child(index); size_t largest = index;
if (left < n && cmp(vec[largest], vec[left])) largest = left; if (right < n && cmp(vec[largest], vec[right])) largest = right; if (largest == index) break; swap(vec[index], vec[largest]); index = largest; } }
voidadd(int userId, int taskId, int priority){ vector<int> vec; vec.push_back(userId); vec.push_back(taskId); vec.push_back(priority); // 拷贝 max_heap.push(vec); }
voidedit(int taskId, int newPriority){ int index = -1; int oldPriority; for (int i = 0; i < max_heap.vec.size(); i++) { if (max_heap.vec[i][1] == taskId) { index = i; oldPriority = max_heap.vec[i][2]; max_heap.vec[i][2] = newPriority; break; } } if (index == -1) { return; }
voidrmv(int taskId){ int index = -1; int oldPriority; for (int i = 0; i < max_heap.vec.size(); i++) { if (max_heap.vec[i][1] == taskId) { index = i; oldPriority = max_heap.vec[i][2]; break; } } if (index == -1) { return; }
if (index == max_heap.vec.size() - 1) { max_heap.vec.pop_back(); return; }
/** * Your TaskManager object will be instantiated and called as such: * TaskManager* obj = new TaskManager(tasks); * obj->add(userId,taskId,priority); * obj->edit(taskId,newPriority); * obj->rmv(taskId); * int param_4 = obj->execTop(); */