簡體   English   中英

對3D向量排序

[英]Sorting a 3D vector of pairs

我聲明了以下向量:

std::vector<std::vector<std::vector<std::pair<float, int>>>> depth;

我想按它們的第一個元素按升序對每個向量中的對進行排序。

排序:

for(std::vector<std::vector<std::pair<float,int>>> vec1 : depth) {
    for(std::vector<std::pair<float,int>> vec2 : vec1) {
        std::sort(vec2.begin(), vec2.end());
    }
}

然后打印:

for (std::vector<std::vector<std::pair<float,int>>> vec1 : depth) {
    for (std::vector<std::pair<float, int>> vec2 : vec1) {
        if(!vec2.empty() && (vec2.size() > 1)) {
            for (std::pair<float, int> pr : vec2) {
                std::cout << pr.first << " " << pr.second << "   ";
            }
            std::cout << std::endl;
        }
    }
}

結果的一部分:

4.65514 1   3.10343 2   
4.67043 1   3.11362 2   
4.68594 1   3.12396 2

應該如何:

3.10343 2   4.65514 1
3.11362 2   4.67043 1
3.12396 2   4.68594 1

感謝您提供任何幫助,因為我真的沒辦法去做,而且我無法弄清楚自己在做什么錯。

正如LogiStuff在評論中所說,您正在對副本進行排序。 這是因為使用for-range的方式具有從范圍的每個元素復制構造的迭代變量。

為了解決這個問題,您只需要添加一個&即可通過引用遍歷該范圍,以便對向量進行適當排序。 更好的是,使用auto向現代C ++邁進了一步:

for(auto &vec1 : depth) {
  for(auto &vec2 : vec1) {
    std::sort(vec2.begin(), vec2.end());
    }
}

這里在線演示

暫無
暫無

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

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