我有一个函数可以生成两个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
来输出地图,因为我没有权限。
答案 0 :(得分:0)
如果不进入杂草就很难打败它。对于普通的旧std::stack
,后备存储是std::deque
。 pop()
操作只是移动一个指向双端队列末尾的指针。这意味着您只是在后台使用指针。
但是,您正在向后迭代std::deque
,这通常是访问内存的最差方式。对于小std::stack
,这没关系。对于较大的std::stack
,内存带宽会使循环变慢。您可以通过创造性的黑客来解决这个问题,直接访问嵌入式std::deque
。 将无效保修。