由于需要用到c++的unique做集合计算,所以搞一个使用的demo.
主要说明几点注意事项:
1、对于自定义类的集合,需要使用重载类的操作符"<"和"==", 重载的目的是为了能够让sort函数知道如何比较两个变量的大小(用于排序)和相等(用于并集的计算).
2、必须在排序后使用erase()函数删除重复项,否则使用unique后重复项仍然存在。
3、在重载操作符时,如果用到string类型值的比较一定要包含<string>头,不然比较的结果不正确,因为编译器找不到比较的方法。
代码如下:
头文件:
#include<string>
using namespace std;
class CSyparam
{
public:
CSyparam(void)
{
this->Inputparam="";
this->Outputval="";
this->reval=0;
this->ServiceName="";
}
~CSyparam(void)
{
}
public:
bool operator <(CSyparam& L)
{
if(strcmp(this->Inputparam.c_str(),L.Inputparam.c_str()))
return true;
else
return false;
}
bool operator ==(CSyparam& L)
{
if((this->Inputparam==L.Inputparam)
&&(this->Outputval==L.Outputval)
&&(this->reval==L.reval)
&&(this->ServiceName==L.ServiceName))
//std::string::compare(
//if(this->Inputparam==L.Inputparam)
return true;
else
return false;
}
public:
std::string ServiceName;
std::string Inputparam;
std::string Outputval;
int reval;
};
实现文件:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
//排序测试
vector<CSyparam> A1;
int i=0;
for(i=1;i<=10;i++)
{
CSyparam sp;
sp.Inputparam="dsdsdsds";
sp.Outputval="1";
A1.push_back(sp);
}
printf("sA1排序前。。。。/r/n");
for(i=0;i<A1.size();i++)
{
printf("%s/r/n",A1[i].Inputparam.c_str());
}
sort(A1.begin(),A1.end());
vector<CSyparam>::iterator iter;
iter=unique(A1.begin(),A1.end());//并集运算
A1.erase(iter,A1.end()); //删除重复元素
printf("A1排序后。。。。/r/n");
for(i=0;i<A1.size();i++)
{
printf("%s/r/n",A1[i].Inputparam.c_str());
}
getchar();
return 0;
}
}
主要说明几点注意事项:
1、对于自定义类的集合,需要使用重载类的操作符"<"和"==", 重载的目的是为了能够让sort函数知道如何比较两个变量的大小(用于排序)和相等(用于并集的计算).
2、必须在排序后使用erase()函数删除重复项,否则使用unique后重复项仍然存在。
3、在重载操作符时,如果用到string类型值的比较一定要包含<string>头,不然比较的结果不正确,因为编译器找不到比较的方法。
代码如下:
头文件:
#include<string>
using namespace std;
class CSyparam
{
public:
CSyparam(void)
{
this->Inputparam="";
this->Outputval="";
this->reval=0;
this->ServiceName="";
}
~CSyparam(void)
{
}
public:
bool operator <(CSyparam& L)
{
if(strcmp(this->Inputparam.c_str(),L.Inputparam.c_str()))
return true;
else
return false;
}
bool operator ==(CSyparam& L)
{
if((this->Inputparam==L.Inputparam)
&&(this->Outputval==L.Outputval)
&&(this->reval==L.reval)
&&(this->ServiceName==L.ServiceName))
//std::string::compare(
//if(this->Inputparam==L.Inputparam)
return true;
else
return false;
}
public:
std::string ServiceName;
std::string Inputparam;
std::string Outputval;
int reval;
};
实现文件:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
//排序测试
vector<CSyparam> A1;
int i=0;
for(i=1;i<=10;i++)
{
CSyparam sp;
sp.Inputparam="dsdsdsds";
sp.Outputval="1";
A1.push_back(sp);
}
printf("sA1排序前。。。。/r/n");
for(i=0;i<A1.size();i++)
{
printf("%s/r/n",A1[i].Inputparam.c_str());
}
sort(A1.begin(),A1.end());
vector<CSyparam>::iterator iter;
iter=unique(A1.begin(),A1.end());//并集运算
A1.erase(iter,A1.end()); //删除重复元素
printf("A1排序后。。。。/r/n");
for(i=0;i<A1.size();i++)
{
printf("%s/r/n",A1[i].Inputparam.c_str());
}
getchar();
return 0;
}
}