We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
采用heap处理多线程时间戳好像有些问题,不知是否是我理解有问题 代码demo如下
#include <vector> #include <iostream> struct HeapNode { HeapNode(int t) : cur_time(t) {} int cur_time; }; std::vector<HeapNode> bgThreadBuffers; void adjustHeap(size_t i) { while (true) { size_t min_i = i; size_t ch = i * 2 + 1; size_t end = std::min(ch + 2, bgThreadBuffers.size()); for (; ch < end; ch++) { auto h_ch = bgThreadBuffers[ch].cur_time; auto h_min = bgThreadBuffers[min_i].cur_time; if (h_ch && (!h_min || h_ch < h_min)) min_i = ch; } if (min_i == i) break; std::swap(bgThreadBuffers[i], bgThreadBuffers[min_i]); i = min_i; } } int main() { HeapNode node1(0); HeapNode node2(3); HeapNode node3(1); HeapNode node4(2); HeapNode node5(4); HeapNode node6(7); bgThreadBuffers.push_back(node1); bgThreadBuffers.push_back(node2); bgThreadBuffers.push_back(node3); bgThreadBuffers.push_back(node4); bgThreadBuffers.push_back(node5); bgThreadBuffers.push_back(node6); for (int i = bgThreadBuffers.size() / 2; i >= 0; i--) { adjustHeap(i); } std::cout << "--------------end-----------------" << std::endl; for (auto node : bgThreadBuffers) { std::cout << node.cur_time << " "; } std::cout << std::endl; }
输出结果为1 2 7 3 4 0 请大佬指教
The text was updated successfully, but these errors were encountered:
ch = std::min(i * 2 + 1, bgThreadBuffers.size()),没有对ch做判断
Sorry, something went wrong.
fmtlog里面的header是一个指针,你的代码里没用到指针,不能照抄adjustHeap。另外你这段代码只是建堆,还没有排序
额说的对,忽略了指针,打扰了...膜拜大佬
No branches or pull requests
采用heap处理多线程时间戳好像有些问题,不知是否是我理解有问题
代码demo如下
输出结果为1 2 7 3 4 0
请大佬指教
The text was updated successfully, but these errors were encountered: