请教一个关于set_union的问题
//////////////////////////////////////////////////
// 这段可以通过
#include <algorithm>
#include <set>
using namespace std;
int main()
{
set<int> s1;
set<int> s2;
set<int> s;
s.insert(1);
set_union(s2.begin(), s2.end(), s.begin(), s.end(),
inserter(s1, s1.begin()) );
return 0;
}
/////////////////////////////////////////////////////
//这段通不过,why?
#include <algorithm>
#include <set>
#include "fun_obj.h"
using namespace std;
int main()
{
set<CID> s1;
set<CID> s2;
set<CID> s;
s.insert(CID(1, 2));
set_union(s2.begin(), s2.end(), s.begin(), s.end(),
inserter(s1, s1.begin()) );
return 0;
}
/////////////////////////////////////////////////////
<fun_obj.h>
#ifndef FUN_OBJ_H
#define FUN_OBJ_H
#include "id.h"
class CLessThan
{
public:
bool operator() (const CID & id1, const CID & id2)
{
return id1.GetI() < id2.GetI() ||
id1.GetI() == id2.GetI() && id1.GetJ() < id2.GetJ();
}
};
#endif
//////////////////////////////////////
<id.h>
#ifndef ID_H
#define ID_H
class CID
{
public:
CID () {;}
CID (int n_i, int n_j);
CID (const CID & id);
CID & operator= (const CID & id);
bool operator== (const CID & id) const;
bool operator!= (const CID & id) const {return !operator==(id);}
int GetI () const {return m_n_i;}
int GetJ () const {return m_n_j;}
private:
int m_n_i;
int m_n_j;
};
#endif
////////////////////////////////////////
<id.cc>
#include "id.h"
CID::CID (int n_i, int n_j):
m_n_i(n_i), m_n_j(n_j)
CID::CID (const CID & id):
m_n_i(id.m_n_i), m_n_j(id.m_n_j)
{
}
CID & CID::operator= (const CID & id)
{
m_n_i = id.m_n_i;
m_n_j = id.m_n_j;
return *this;
}
bool CID::operator== (const CID & id) const
{
return m_n_i == id.m_n_i && m_n_j == id.m_n_j;
}
////////////////////////////////////////