在C ++中将两个关联的std :: stack合并到std :: map中的计算效率是多少

时间:2014-07-31 02:11:10

标签: c++ map merge stack

我有一个函数可以生成两个std::stack个关联值,并且元素之间有一对一的对应关系。为了方便我在函数之间传递值,我希望将两个堆栈合并到一个映射中。

截至目前,我弹出堆叠中的每个元素,形成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来输出地图,因为我没有权限。

1 个答案:

答案 0 :(得分:0)

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

但是,您正在向后迭代std::deque,这通常是访问内存的最差方式。对于小std::stack,这没关系。对于较大的std::stack,内存带宽会使循环变慢。您可以通过创造性的黑客来解决这个问题,直接访问嵌入式std::deque无效保修。