【发布时间】:2019-01-29 16:46:26
【问题描述】:
我有一些数据如下:
size_t num_elements = //...
some_type_t *data = //...
int *scores = //...
每个元素data[i] 在scores[i] 中都有对应的分数。我想对data 和scores 进行排序,使用scores 的数组对数据进行排序。
例如,对于数据:
data = {'d', 'g', 'i', 'a', 'p'}
scores = {3, 5, 1, 2, 4}
排序后的版本是
data = {'i', 'a', 'd', 'p', 'g'}
scores = {1, 2, 3, 4, 5}
有没有办法使用 C++ 标准库? 我宁愿不需要包含 Boost 或尚未标准化的库。
我还想避免不必要地复制数据。这包括将其转换为结构数组。
【问题讨论】:
-
是的。函数名称为
std::sort -
@Someprogrammerdude 提供你自己的操作符
-
@eerorika 不,不是,OP 需要排序以同时移动 2 个容器中的元素,比较器对此无能为力。请仔细阅读问题。
-
@Slava 不需要同时移动它们。只要您不介意制作副本,为每个数组单独进行排序是微不足道的。但正如我所说,这不是最优的。此外,通过使用自定义迭代器,
std::sort可以同时移动 2 个容器中的元素。 -
这个问题有几十个版本,如果链接的副本不适合你。