【问题标题】:Compare two std::list lists and get different objects比较两个 std::list 列表并获取不同的对象
【发布时间】:2012-06-05 14:03:35
【问题描述】:

是否有准备好的函数来获取两个std::list 列表的差异?

例如我有list1: obj1, obj2, obj3, obj4list2: obj2, obj3, obj4, obj5

函数结果应该是list1_unique: obj1list1_and_list2: obj2, obj3, obj4list2_unique: obj5

(编写自己的实现并不难,但我更喜欢标准函数)

【问题讨论】:

  • 你应该使用集合,而不是列表。
  • 首选使用列表,因为我经常添加/删除元素(手动保持列表排序)。 Set 可能不太有效,因为它是“自动排序”。

标签: c++ compare stdlist


【解决方案1】:

如果您的列表已排序(如您的示例所示),std::set_difference 得到list1_uniquelist2_uniquestd::set_intersection 得到list1_and_list2。如果它们尚未排序,您可以使用std::list::sort() 对其进行排序。

【讨论】:

  • 列表是有序的,我可以定义表示该顺序的比较函数。感谢您的回答!
  • @JohnDibling 值得 2 被 OP 以这种方式对待;)(假设您投了赞成票)。我从来不理解人们不赞成他们认为至少可以接受它的答案,但是很好。
  • @brigadir:如果您使用自己的比较函数对列表进行排序,请务必将其传递给您使用的集合算法。
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 2021-08-12
  • 2020-07-07
  • 2022-11-17
  • 2015-10-20
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多