我正在使用stl :: merge将两个已排序的集合合并为一个。用于合并加法的STL算法
但我的对象有一个自然的关键;和一个定义的附加语义,所以我所追求的是merge_and_sum,它不会将两个集合合并成一个N + M长度集合,但如果对象上的运算符==返回true,那么将运算符+它们。
我就此
template<class _InIt1, class _InIt2, class _OutIt>
_OutIt merge_and_sum(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
{ // copy merging ranges, both using operator<
for (; _First1 != _Last1 && _First2 != _Last2; ++_Dest)
{
if (*_First2 < *_First1)
*_Dest = *_First2, ++_First2;
else if (*_First2 == *_First1)
*_Dest = *_First2 + *_First1, ++_First1, ++_First2;
else
*_Dest = *_First1, ++_First1;
}
_Dest = copy(_First1, _Last1, _Dest); // copy any tail
return (copy(_First2, _Last2, _Dest));
}
实现了它,但不知道如果我重新发明的东西是从其他算法可组合。
变量名称不允许以下划线开头,后跟大写字母。只有编译器提供的名称才允许这样做。 – rlbond 2009-07-17 20:02:27
是的 - 谢谢。当我开始剪切/粘贴编译器的std :: merge时,会发生这种情况:-) – sdg 2009-07-17 20:26:25