在c++中将两个相关的std::堆栈合并为std::map的计算效率如何?

What is the computationally efficient way to merge two associated std::stack into a std::map in C++

本文关键字:std map 合并 堆栈 计算 效率 c++ 两个      更新时间:2023-10-16

我有一个函数,它生成两个元素之间一对一对应的关联值的std::stack s。为了便于在函数之间传递值,我希望将两个堆栈合并为一个map。

到目前为止,我在堆栈中弹出每个元素,形成std::pair并将其插入std::map中,如下所示:

/* peaks_x and peaks_y are the stacks that I 
want to merge into the map called peaksmap which is 
given as argument to this function */
/* create the stacks*/
std::stack<int> peaks_x;
std::stack<float> peaks_y; 
/* the following function populates the values needed */
populatepeakvalues(&peaks_x,&peaks_y);
/* merging here into a map*/
while(!peaks_x.empty() && !peaks_y.empty() ) {
   peaksmap->insert(std::pair<int,float>(peaks_x.top(),peaks_y.top()));
   peaks_x.pop(); 
   peaks_y.pop();
}

这是最好的方法还是有更快的计算方法?可能在使用指针?

注意:我不能编辑函数populatepeakvalues输出映射,因为我没有权限。

在不进入杂草的情况下很难打败它。对于普通的旧std::stack,后备存储是std::dequepop()操作只是移动一个指向队列末尾的指针。这意味着你只是在后台使用指针。

然而,你是在向后迭代std::deque,这通常是最糟糕的访问内存的方式。对于小型std::stack来说,这无关紧要。对于较大的std::stack,内存带宽将使循环变慢。您可能能够通过创造性的黑客直接访问嵌入式std::deque来解决这个问题。那个将会使你的保修无效。