主题:问一个关于stl和set_union得问题。。。
查了点资料还是有点困惑。。。问题如下:
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
struct test
{
int i;
double j;
test(){}
test(int a, int b):i(a),j(b){}
void show()
{
cout<<"("<<i<<","<<j<<")"<<endl;
}
bool operator > (const test &b)//后面编译无法通过,显示小于号没有重载。。。很困惑,这是第一个问题
{
if(this->i>b.i)
return true;
else
{
if(this->i==b.i && this->j>b.j)
return true;
else
return false;
}
}
bool operator < (const test &b)
{
if(this->i<b.i)
return true;
else
{
if(this->i==b.i && this->j<b.j)
return true;
else
return false;
}
}
};
/*struct KeyComp //这里如果不作为注释并且声明时候为 set<test, KeyComp>,那么编译可以通过且可以正常运行。。。,第一个问题可以解决。。但不明白为什么符号没有重载
{
bool operator () (const test &a, const test &b)
{
if(a.i>b.i)
return true;
else
{
if(a.i==b.i && a.j>b.j)
return true;
else
return false;
}
}
};*/
int a[] = {7,3,7,1,6};
int b[] = {1,4,2,7,6};
int c[] = {1,4,2,6,7};
int d[] = {3,2,7,4,9};
int main()
{
struct test t;
set<test, KeyComp> set1, set2, result;
set<test, KeyComp>::iterator it;
for(int i=0; i<5; i++)
{
t.i = a[i];
t.j = b[i];
set1.insert(t);
t.i = c[i];
t.j = d[i];
set2.insert(t);
}
for(it=set1.begin(); it!=set1.end(); it++)
(*it).show();
cout<<endl<<endl;
for(it=set2.begin(); it!=set2.end(); it++)
(*it).show();
//set_union( set1.begin(), set1.end(), set2.begin(), set2.end(), inserter( result, result.begin() ) );
//for(it=result.begin(); it!=result.end(); it++)
//(*it).show();
}
在上面可以正常运行的情况下(也就是KeyComp不作为注释),如果运行set_union的话出来红叉子显示运行错误。。。这是第二个问题
环境是VC2005.
多谢了,bow~
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
struct test
{
int i;
double j;
test(){}
test(int a, int b):i(a),j(b){}
void show()
{
cout<<"("<<i<<","<<j<<")"<<endl;
}
bool operator > (const test &b)//后面编译无法通过,显示小于号没有重载。。。很困惑,这是第一个问题
{
if(this->i>b.i)
return true;
else
{
if(this->i==b.i && this->j>b.j)
return true;
else
return false;
}
}
bool operator < (const test &b)
{
if(this->i<b.i)
return true;
else
{
if(this->i==b.i && this->j<b.j)
return true;
else
return false;
}
}
};
/*struct KeyComp //这里如果不作为注释并且声明时候为 set<test, KeyComp>,那么编译可以通过且可以正常运行。。。,第一个问题可以解决。。但不明白为什么符号没有重载
{
bool operator () (const test &a, const test &b)
{
if(a.i>b.i)
return true;
else
{
if(a.i==b.i && a.j>b.j)
return true;
else
return false;
}
}
};*/
int a[] = {7,3,7,1,6};
int b[] = {1,4,2,7,6};
int c[] = {1,4,2,6,7};
int d[] = {3,2,7,4,9};
int main()
{
struct test t;
set<test, KeyComp> set1, set2, result;
set<test, KeyComp>::iterator it;
for(int i=0; i<5; i++)
{
t.i = a[i];
t.j = b[i];
set1.insert(t);
t.i = c[i];
t.j = d[i];
set2.insert(t);
}
for(it=set1.begin(); it!=set1.end(); it++)
(*it).show();
cout<<endl<<endl;
for(it=set2.begin(); it!=set2.end(); it++)
(*it).show();
//set_union( set1.begin(), set1.end(), set2.begin(), set2.end(), inserter( result, result.begin() ) );
//for(it=result.begin(); it!=result.end(); it++)
//(*it).show();
}
在上面可以正常运行的情况下(也就是KeyComp不作为注释),如果运行set_union的话出来红叉子显示运行错误。。。这是第二个问题
环境是VC2005.
多谢了,bow~

您所在位置: