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

C++中如何根据整数数组排序规则同步排序对应字符串数组

你遇到的问题本质是两个数组的元素是强关联的,单独对其中一个数组排序时没有同步处理另一个数组的元素顺序,才会导致对应关系错乱。常见解决方法如下:

方案1:自定义结构体存储关联数据(最推荐)

将数值和对应的姓名绑定为同一个结构体的两个字段,直接对结构体数组排序,天然保留二者的对应关系,也便于后续扩展其他字段。

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

// 定义结构体绑定关联的数值和姓名字段
struct Person {
    int number;
    string name;
};

int main() {
    Person people[] = {
        {5, "Jeremy"},
        {2, "Samantha"}
        // 剩余元素按相同格式补充
    };
    int n = sizeof(people) / sizeof(people[0]);
    // 按number字段降序排序
    sort(people, people + n, [](const Person& a, const Person& b) {
        return a.number > b.number;
    });
    
    // 输出验证,对应关系完全保留
    for(int i = 0; i < n; i++) {
        cout << people[i].number << " " << people[i].name << endl;
    }
    return 0;
}

方案2:创建索引数组排序

如果不想修改原有数组的存储结构,可以额外创建一个索引数组,排序索引时按照对应位置的数值大小排序,排序完成后按索引顺序读取两个数组即可拿到正确的对应关系。

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main() {
    int Numbers[] = {5, 2};
    string Names[] = {"Jeremy", "Samantha"};
    int n = sizeof(Numbers) / sizeof(Numbers[0]);
    
    // 初始化索引数组
    int indices[n];
    for(int i = 0; i < n; i++) {
        indices[i] = i;
    }
    
    // 按Numbers对应值降序排序索引
    sort(indices, indices + n, [&](int a, int b) {
        return Numbers[a] > Numbers[b];
    });
    
    // 按排序后的索引读取数据,对应关系正确
    for(int i = 0; i < n; i++) {
        cout << Numbers[indices[i]] << " " << Names[indices[i]] << endl;
    }
    return 0;
}

方案3:排序时同步交换两个数组元素(不推荐)

如果仅需要临时修改不想新增代码量,也可以自定义排序逻辑,每次交换数值数组元素的同时交换对应位置的姓名数组元素。但这种方法容易写错,且后续新增关联字段时需要同步修改排序逻辑,可维护性差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:27:02