2017-05-28 46 views
0

的3D矢量我有以下向量声明:排序对C++

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 

任何帮助的赞赏,因为我真的用尽了事情,我无法弄清楚我做错了什么。

+1

你整理的副本。错字。 – LogicStuff

+1

使用引用进行排序std :: vector >>&vec1' – Galik

回答

1

正如LogiStuff在评论中所说,您正在对副本进行排序。这是因为你使用for-range的方式,它有一个从范围的每个元素构建的迭代变量。

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

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

这里online demo