对 2 个"linked"数组进行排序的更好方法?

Better way to sort 2 "linked" arrays?

本文关键字:排序 更好 方法 linked 数组      更新时间:2023-10-16

我有2个存储"链接"属性的向量。这就是我的意思:

std::vector<std::string> names;
std::vector<int> ids;
// Name of object with an ID of 5
auto name = names[std::find(ids.begin(), ids.end(), 5) - ids.begin()];

每个对象都有名称和ID,因此索引n处的对象名称为name[n], ID为ids[n]

现在我要按字母顺序对名字进行排序。我可以使用std::sort:

std::sort(names.begin(), names.end());

但是现在id不匹配了!我想做一个对的向量,把每个名字/id放进去,排序,然后提取数据。

这并不是很有效,因为我必须对两个向量的每个元素循环2次,而向量有很多元素。

我怎样才能使它更有效,因为我不能从一开始就使用成对向量来代替2个向量?

您可以使用std::map字符串将名称映射到它们的索引(这是相同的id索引),如果您也想使用std::map int将id映射到它们的索引(这是相同的名称索引)。

这样你可以保持数组的原样,并有两个有序的结构,可以给你所需的索引快速访问你的数组。