簡體   English   中英

在循環中對向量進行排序

[英]Sorting vectors in a loop

有時我非常喜歡c ++,有時會陷入我不理解的事情中。 我想在向量中的向量中對值進行排序。

工作原理:

for (unsigned int i = 0; i < myVectors.size(); i++) {
    sort(myVectors[i].begin(), myVectors[i].end());
}

什么行不通:

for (unsigned int i = 0; i < myVectors.size(); i++) {
    vector<int> vec = myVectors[i];
    sort(vec.begin(), vec.end());
}

和:

for (auto vec : myVectors) {
    sort(vec.begin(), vec.end());
}

最后兩個不起作用,我不知道為什么

我正在使用mingw64, c++11 ;

這是完整的例子:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    cout << "i  vec1   vec2" << endl;
    for (int i = 0; i < 3; i++) {

        // create vectors
        vector<int> vec1;
        vec1.push_back(5);
        vec1.push_back(1);

        vector<int> vec2;
        vec2.push_back(4);
        vec2.push_back(2);

        vector<vector<int>> myVectors;
        myVectors.push_back(vec1);
        myVectors.push_back(vec2);

        switch(i) {
        case 0:
            for (unsigned int i = 0; i < myVectors.size(); i++) {
                sort(myVectors[i].begin(), myVectors[i].end());
            }
            break;
        case 1:
            for (unsigned int i = 0; i < myVectors.size(); i++) {
                vector<int> vec = myVectors[i];
                sort(vec.begin(), vec.end());
            }
            break;
        case 2:
            for (auto vec : myVectors) {
                sort(vec.begin(), vec.end());
            }
            break;
        }

        cout << i << "  ";
        for (auto vec: myVectors) {
            for (int i : vec) {
                cout << i << " ";
            }
            cout << "   ";
        }
        cout << endl;

    }
    return 0;
}

輸出:

i  vec1   vec2
0  1 5    2 4    
1  5 1    4 2    
2  5 1    4 2    

兩個不起作用的版本是復制矢量,並對這些矢量進行排序,保持外部矢量不變。 您可以改為使用引用:

for (unsigned int i = 0; i < myVectors.size(); i++) {
    vector<int>& vec = myVectors[i];
    sort(vec.begin(), vec.end());
}

for (auto& vec : myVectors) {
    sort(vec.begin(), vec.end(), pointCompare);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM