【问题标题】:Sorting std::list using std::set使用 std::set 对 std::list 进行排序
【发布时间】:2011-01-08 03:43:41
【问题描述】:

我正在向 std::list 和 std::set 添加两个不同的元素,并且我希望 std::list 以与 std::set 相同的顺序排序。我尝试的一种方法是将元素添加到 std::set 时,找到该元素,然后使用 std::distance(begin, found) 获取该元素的索引,然后将该元素插入到 std::list 中的该索引。还有其他方法吗?

【问题讨论】:

  • 你为什么要这样做?对于您的问题,可能有更好的整体解决方案,而不是找到一个可能来保持列表和设置同步。
  • 只保留 std::set ,当您需要 std:: 列表时,您可以从 std::set 创建它。
  • std::set 包含一个“键”,而 std::list 包含一个与该键相关的值。在那种情况下,我认为使用 std::map 会更好。

标签: c++ stl


【解决方案1】:

方法太复杂了! 实际上 std::set 实现为二叉树,并使用 std::less 进行排序(默认情况下)。这也提供了“稳定的”迭代器,这意味着 std::set::insert 返回的迭代器将有效,直到元素显式擦除。所以你可以把刚刚插入的迭代器放到 std::list 中。 明智的做法 - std::list 也有稳定的迭代器,因此您可以将项目放入列表但放置迭代器进行设置。最后一种方式只是覆盖 std::less

【讨论】:

    【解决方案2】:

    您应该使用std::map,将您放入集合中的数据作为键,并将您放入列表中的数据作为值。

    这样您的列表元素将被排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2019-08-08
      • 2012-01-21
      • 2021-07-15
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多