gpt4 book ai didi

c++ - 对 3D vector 对进行排序

转载 作者:行者123 更新时间:2023-11-28 05:07:50 26 4
gpt4 key购买 nike

我声明了以下 vector :

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

我想按第一个元素升序对每个 vector 中的对进行排序。

排序:

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 的方式有一个迭代变量,该变量是从范围的每个元素复制构造的。

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

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

这里是 online demo

关于c++ - 对 3D vector 对进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com