排序对的3D矢量

问题描述 投票:0回答:1

我声明了以下向量:

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

任何帮助都是值得赞赏的,因为我真的没有尝试做的事情,我无法弄清楚我做错了什么。

c++ sorting vector std-pair
1个回答
1
投票

正如LogiStuff在评论中所说,你正在整理副本。这是因为你使用for-range的方式,迭代变量是从范围的每个元素构造的副本。

要解决这个问题,您只需添加一个&来通过引用迭代范围,以便向量进行排序。更好的是,使用auto向现代C ++迈进一步:

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

这里是online demo

© www.soinside.com 2019 - 2024. All rights reserved.