You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何传入列索引实现vector按任意指定列值排序

问题描述

你当前实现的固定列排序代码如下,仅支持按二维vector的第一列排序,需要编写多套函数才能切换排序列:

bool sortcol( const vector <int> v1, const vector <int> v2)
{
return v1[0]<v2[0];
}

sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol);

你期望的调用形式是直接传入列索引,不用编写多个排序函数:

bool sortcol(int ind, const vector <int> v1, const vector <int> v2)
{
return v1[ind]<v2[ind];
}

sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol(0));

这种写法无法直接生效,因为std::sort要求第三个参数是仅接收两个待比较元素作为入参的可调用对象,直接调用sortcol(0)会返回布尔值,不符合比较器的参数要求。

实现方法

不需要编写多个排序函数,用lambda捕获要排序的列索引即可实现需求,C++11及以上版本均支持该写法:

int sort_col_index = 0; // 替换成需要排序的列序号即可
sort(ArrOfTimings.begin(), ArrOfTimings.end(), 
    [sort_col_index](const vector<int>& v1, const vector<int>& v2) {
        return v1[sort_col_index] < v2[sort_col_index];
    }
);

优化提示:比较函数的vector参数建议加const引用,避免每次比较都拷贝整个vector,能大幅提升排序性能。

如果需要封装成你期望的sortcol(ind)调用形式,可以写一个返回比较器的外层函数:

auto sortcol(int ind) {
    return [ind](const vector<int>& v1, const vector<int>& v2) {
        return v1[ind] < v2[ind];
    };
}

// 调用形式和预期完全一致
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol(0)); // 按第0列排序
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol(2)); // 切换为按第2列排序

内容的提问来源于stack exchange,提问作者Mayank_pawar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:01:47