【问题标题】:How can I keep the order of a vector after sorting it排序后如何保持向量的顺序
【发布时间】:2023-01-07 11:57:25
【问题描述】:

我有一个结构向量,每个结构都有一个数字 ID,我用它来对向量项进行排序。我希望对 ID 进行排序,但也希望在排序后按它们在原始向量中的顺序出现。让我解释...

假设您有一个这样的向量(忽略结构):

vector<int> items = {
    1,
    2,
    5, // First 5
    8,
    9,
    6,
    5, // Second 5
    4,
    7,
    3,
    5, // Third 5
    10
};

排序后我希望矢量看起来像这样:

vector<int> items = {
    1,
    2,
    3,
    4,
    5, // First 5
    5, // Second 5
    5, // Third 5
    6,
    7,
    8,
    9,
    10
};

请记住,这些项目实际上是结构。多个可以具有相同的 ID,但其他属性的值不同。现在,我认为结构在排序后没有可预测的顺序。有没有办法确保这种输出?我可以向结构添加另一个属性来指示它们的原始顺序,并以某种方式在排序算法中使用它吗?

【问题讨论】:

    标签: c++ algorithm sorting


    【解决方案1】:

    这就是std::stable_sort 的用途;当项目比较相等时,它们的出现顺序与它们在原始数据集中出现的顺序相同。 Plain std::sort 没有这样的保证(因此可以使用稍微更有效的算法进行排序,不会保留相等元素的顺序),但是 std::stable_sort 需要使用算法做那个保证。

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多