我得到的最好的例子是我想根据他们的分数对名称进行排序。
vector <string> Names {"Karl", "Martin", "Paul", "Jennie"};
vector <int> Score{45, 5, 14, 24};
因此,如果我将分数排序为 {5, 14, 24, 45},则名称也应根据其分数进行排序。
原文由 Krillex 发布,翻译遵循 CC BY-SA 4.0 许可协议
将名称和分数合并到一个结构中的另一种方法是创建一个索引列表并对其进行排序:
std::vector<int> indices(Names.size());
std::iota(indices.begin(), indices.end(), 0);
std::sort(indices.begin(), indices.end(),
[&](int A, int B) -> bool {
return Score[A] < Score[B];
});
现在 indices
可用于索引 Names
和 Scores
以所需的排序顺序。
原文由 wcochran 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
正如其他答案中已经建议的那样:结合每个人的姓名和分数可能是最简单的解决方案。
通常,这可以通过有时被称为“压缩”操作来实现:将两个向量组合成一个成对的向量 - 以及相应的“解压缩”。
一般实现,这可能如下所示: