在循环中对向量进行排序

Posted

技术标签:

【中文标题】在循环中对向量进行排序【英文标题】:Sorting vectors in a loop 【发布时间】:2014-02-14 09:14:36 【问题描述】:

有时我非常喜欢 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    

【问题讨论】:

您正在制作副本。您为什么希望它们起作用? 【参考方案1】:

两个不起作用的版本是制作矢量的副本,并对它们进行排序,使您的外部矢量保持不变。您可以改用引用:

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

【讨论】:

以上是关于在循环中对向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 np.ndarray 中对向量进行排序

如何在 C++ 中对向量组元素进行排序?

在 C++ 中对向量进行分组排序

在向量c ++中对复数进行排序

在C ++中对字符向量进行排序并将大写字母和小写字母视为相同的最佳方法?

在 C++ 中对自定义对象的向量进行操作 [关闭]