[英]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.