class Foo
{
public:
 std::set<DWORD> hoge;
 bool operator<(const Foo& rhs) const
 {
  std::set<DWORD>::const_iterator iter1, end1;
  std::set<DWORD>::const_iterator iter2, end2;

  iter1 = hoge.begin();
  iter2 = rhs.hoge.begin();

  end1 = hoge.end();
  end2 = rhs.hoge.end();

  for (;iter1 != end1 || iter2 != end2; iter1++, iter2++) {
   DWORD a = *iter1;
   if (iter1 == end1 && iter2 != end2)
    return true;
   else if (iter1 != end1 && iter2 == end2)
    return false;

   if (*iter1 < *iter2)
    return true;
   else if (*iter1 > *iter2)
    return false;
  }
  return false;
 }
};

Foo foo;
foo.hoge.insert(10);
foo.hoge.insert(20);
foo.hoge.insert(30);

std::set<Foo> setFoo;
setFoo.insert(foo);
setFoo.insert(foo);

setFoo.size() => 1
setFoo.begin()->hoge.size() => 3

(俺には)見づらかったのでなおして試したけど、正常だが?