簡體   English   中英

在C ++中將兩個關聯的std :: stack合並為std :: map的計算有效方式是什么?

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

我有一個函數,該函數生成兩個關聯值的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輸出地圖。

不進入雜草就很難戰勝這一點。 對於普通的舊std::stack ,后備存儲區是std::deque pop()操作只是移動一個指向雙端隊列末尾的指針。 這意味着您僅在后台使用指針。

但是,您正在向后遍歷std::deque ,這通常是訪問內存的最差方法。 對於一個小的std::stack ,沒關系。 對於較大的std::stack ,內存bandwith將使循環變慢。 您可能可以通過創造性的技巧來解決該問題,以直接訪問嵌入式std::deque 將使您的保修失效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM