我声明了以下向量:
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
任何帮助都是值得赞赏的,因为我真的没有尝试去做的事情,我无法弄清楚我做错了什么。
答案 0 :(得分:1)
正如LogiStuff在评论中所说,你正在整理副本。这是因为你使用for-range的方式,迭代变量是从范围的每个元素构造的副本。
要解决此问题,您只需添加&
即可通过引用迭代范围,以便向量进行排序。更好的是,使用auto
向现代C ++迈进一步:
for(auto &vec1 : depth) {
for(auto &vec2 : vec1) {
std::sort(vec2.begin(), vec2.end());
}
}
这里是online demo