| | | | | |

Set Union

template <class I1, class I2, class I3> 
void g_set_union
  (I1 b1, I1 e1, I2 b2, I2 e2, I3 d) 
// range3 = range1 union range2
{
  while (b1 != e1 && b2 != e2)
  {
    if (*b1 < *b2)
    {
      *d = *b1;
      ++b1;
    }
    else if (*b2 < *b1)
    {
      *d = *b2;
      ++b2;
    }
    else  // (*b1 == *b2): only 1 copy
    {
      *d = *b1;
      ++b1;
      ++b2;
    }
    ++d;
  }
  while (b1 != e1)
  {
    *d++ = *b1++;
  }
  while (b2 != e2)
  {
    *d++ = *b2++;
  }
}

Set Merge

template <class I1, class I2, class I3>
void g_set_merge
  (I1 b1, I1 e1, I2 b2, I2 e2, I3 d)  
// range3 = range1 merge range2 
{
  while (b1 != e1 && b2 != e2)
  {
    if (*b2 < *b1)
    {
      *d = *b2;
      ++b2;
    }
    else // (*b1 <= *b2): favor range 1
    {
      *d = *b1;
      ++b1;
    }
    ++d;
  }
  while (b1 != e1)
  {
    *d++ = *b1++;
  }
  while (b2 != e2)
  {
    *d++ = *b2++;
  }
}

| | Top of Page | 8. Generic Set Algorithms - 4 of 7