首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据第一个和第二个索引对C++中的2D向量进行排序?

如何根据第一个和第二个索引对C++中的2D向量进行排序?
EN

Stack Overflow用户
提问于 2022-04-27 15:01:12
回答 4查看 184关注 0票数 1

我想知道如何在C++中对2D向量进行排序,以便按这两个元素进行排序。它将按第一个元素的升序排序,如果存在第一个元素的多个元素,它们将按照第二个元素的升序排序。这里是我的意思的一个例子:

代码语言:javascript
运行
复制
vector<vector<int>> vec = {{10, 23}, {10, 22}, {1, 100}, {13, 12}};

这将被分类为:

代码语言:javascript
运行
复制
{{1, 100}, {10, 22}, {10, 23}, {13, 12}}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-04-27 15:27:05

如果您正在使用C++20,std::ranges::sort将是一个很好的选择:

代码语言:javascript
运行
复制
#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>

int main() {
    std::vector<std::vector<int>> vec = {{10, 25}, {10, 23}, {10, 22},
                                         {10, 24}, {1, 100}, {13, 12}};
    std::ranges::sort(vec);

    for (const auto& row : vec) 
        for (const auto& col : row) 
            std::cout << col << " ";            
}

活样品

输出:

代码语言:javascript
运行
复制
1 100 10 22 10 23 10 24 10 25 13 12 

如果不是,std::sort也同样有效:

代码语言:javascript
运行
复制
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<std::vector<int>> vec = {{10, 25}, {10, 22}, {10, 26},
                                         {10, 24}, {1, 100}, {13, 12}};
    std::sort(vec.begin(), vec.end());

    for (const auto& row : vec)
        for (const auto& col : row) 
            std::cout << col << " ";
}

活样品

输出:

代码语言:javascript
运行
复制
1 100 10 22 10 24 10 25 10 26 13 12
票数 1
EN

Stack Overflow用户

发布于 2022-04-27 15:20:56

代码语言:javascript
运行
复制
sort(vec.begin(), vec.end(), [&](vector<int> &a, vector<int> &b){
        return  a[0] < b[0]? true : (a[0] == b[0]) ?  a[1] < b[1] : false;
    });
票数 1
EN

Stack Overflow用户

发布于 2022-04-27 15:10:54

就像这样:

代码语言:javascript
运行
复制
int m = vec.size();
int n = vec[0].size();
sort(vec[0].begin(), vec[0].end());


for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++)
        cout << vec[i][j] << " ";
    cout << endl;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72031008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档