c++ - 在循环中对 vector 进行排序

标签 c++ sorting gcc vector mingw

有时我非常喜欢c++,有时却卡在我不明白的地方。 我想对 vector 中的值进行排序。

什么是工作:

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    

最佳答案

两个不起作用的版本是制作 vector 的拷贝,并对它们进行排序,同时保持外部 vector 不变。您可以改用引用:

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);
}

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

相关文章:

c++ - 多线程环境下的执行时间

c++ - MKL Intel C++ 和准随机数生成器

c++ - 为什么要在控制台的第二行输入?

algorithm - 适合 64 位整数的完美数字幂(使用优先级队列)

C 冒泡排序整数数组 - 输出问题

gcc - 如何使用 gccgo 构建完整的 go 程序二进制文件?

c++ - 范围枚举 : error: cannot convert ‘int’ to ‘Handle’ in initialization

c++ - cudaLaunchKernel 如何知道 "void **args"的数组大小?

unix - ps按开始时间排序结果

c++ - C++中的字符串类支持多少个字符?