c++ - 对数组结构进行排序

标签 c++ sorting

<分区>

我有一些数据如下:

size_t num_elements = //...
some_type_t *data = //...
int *scores = //...

每个元素data[i]scores[i]中都有对应的分数。我想对 datascores 进行排序,使用 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 或库。

我还想避免不必要地复制数据。这包括将其转换为结构数组。

最佳答案

假设没有理由不合并这两个数据数组,最简单的答案是将它们合并到一个 struct 或一个 class (可能是前者) 与重载运算符。然后,您可以定义这些结构/类的数组,将数据绑定(bind)在一起,以便数据和分数一起移动。

struct ScoredData
{
   some_type_t data;
   int score;

  bool operator<(const ScoredData& right)
  {
      return this->score < right.score;
  }
}

(这个例子可以通过使 some_type_t 成为模板参数来扩展)

如果以这种方式组合这些是 Not Acceptable ,您可能会发现成功地定义了一个模仿这种行为的迭代器。

关于c++ - 对数组结构进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425844/

相关文章:

c# 循环创建对象

mysql - 按 "rep"订购帖子,但仅限 "one"天限制

MySQL按年/月/日排序

c++ - 如何传递带有泛型参数作为参数的 lambda 函数?

c# - 如何将 C++ 数字格式转换为 C# 数字格式?

c++ - 检查和删除未按预期工作

c++ - 如何声明两个类使得 A 具有 B 的成员并且 B 将 A 的成员标记为 friend ?

c++ - 函数调用与局部变量

c++ - "member function already defined or declared"- 这是什么意思?

python - 按键对 dict 列表进行排序。如果缺少键,则假定为连续编号