std :: merge和equal element order

时间:2015-12-17 20:25:16

标签: c++ c++11

std::merge在其输入列表中保留相等元素的顺序。它是否保证第一个列表中的元素位于第二个列表中的相等元素之前,或者是否保证仅适用于单个输入列表中的相等元素?

示例:

List1有1个元素A。 List2有1个元素B。 比较者认为AB相等。

如果我std::merge(list1.begin(), list1.end(), list2.begin(), list2.end(), out, comparator),定义的输出中的AB的相对顺序是什么?

我的意见是标准在这种情况下没有定义顺序。

1 个答案:

答案 0 :(得分:7)

C ++ 14标准草案(n3797):

  

17.6.5.7/1

     

当算法的要求表明它是“稳定的”而没有进一步详细说明时,它意味着:
   - 对于合并算法,对于原始两个范围中的等效元素,来自第一个范围的元素(保留其原始顺序)位于第二个元素的元素之前范围(保留原始订单)。