代码一:
#include<iostream>
#include<list>using namespace std;
struct Point{
int z;
float x;
};
bool cmp(const Point & a,const Point & b) //升序,降序只需要改变大于小于符号
{
if(a.z==b.z)
{
return a.z<b.z;
}
return a.z<b.z;
}
void print1(Point & Ele)
{
cout<<Ele.x<<" "<<Ele.z<<endl;
}
int main()
{
int n=4,m=3; // 1 2 2 3 3 4 4 5 1 2 3 4 4 5
//cin>>n>>m;
list<Point>s1;// 1 2 2 3 3 4 4 5
list<Point>s2;//1 2 3 4 4 5
list<Point>s3; //将合并后的链表再次将指数相同的系数相加之后的放在s3中
for(int i=0;i<n;i++) //输入s1
{
//cin>>ss[i].x>>s1[i].z;
Point aa;
cin>>aa.x>>aa.z;
s1.push_back(aa);
}
for(int i=0;i<m;i++)//输入s2
{
Point aa;
cin>>aa.x>>aa.z;
s2.push_back(aa);
}
s1.merge(s2,cmp); //合并s1和s2,合并到s1中
//for_each(s1.begin(),s1.end(),print1);
list<Point>::iterator iter=s1.begin();
Point pp;
pp.x=(*iter).x;
pp.z=(*iter).z;
++iter;
for(;iter!=s1.end();iter++)
{
if(pp.z==(*iter).z)
{
pp.x+=(*iter).x;
pp.z=(*iter).z;
continue;
}else{
s3.push_back(pp);
pp.x=(*iter).x;
pp.z=(*iter).z;
}
}
s3.push_back(pp);
list<Point>::iterator it=s3.begin();for(;it!=s3.end();it++)
{
cout<<(*it).x<<" "<<(*it).z<<endl;
}
return 0;
}
代码二:
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
struct Point{
int z;
float x;
};
void print(int & e)
{
cout<<e<<" ";
}
void print1(Point & e)
{
cout<<e.z<<" "<<e.x<<endl;
}
bool cmp(const Point & a,const Point &b)
{
if(a.z==b.z)
{
return a.x<b.x;
}
return a.z<b.z;
}
int main()
{
int n=4,m=3; // 1 2 2 3 3 4 4 5 1 2 3 4 4 5
//cin>>n;
list<Point>s1;// 1 2 2 3 3 4 4 5
list<Point>s2;//1 2 3 4 4 5
list<Point>s3; //将合并后的链表再次将指数相同的系数相加之后的放在s3中
for(int i=0;i<n;i++)
{
//cin>>ss[i].x>>s1[i].z;
Point aa;
cin>>aa.x>>aa.z;
s1.push_back(aa);
}
for(int i=0;i<m;i++)
{
Point aa;
cin>>aa.x>>aa.z;
s2.push_back(aa);
}
s1.splice(s1.end(),s2);
for_each(s1.begin(),s1.end(),print1);
s1.sort(cmp);
for_each(s1.begin(),s1.end(),print1);
cout<<"-----------------"<<endl;
list<Point>::iterator iter=s1.begin();
Point pp;
pp.x=(*iter).x;
pp.z=(*iter).z;
++iter;
for(;iter!=s1.end();iter++)
{
if(pp.z==(*iter).z)
{
pp.x+=(*iter).x;
pp.z=(*iter).z;
continue;
}else{
s3.push_back(pp);
pp.x=(*iter).x;
pp.z=(*iter).z;
}
}
s3.push_back(pp);
list<Point>::iterator it=s3.begin();
for(;it!=s3.end();it++)
{
cout<<(*it).x<<" "<<(*it).z<<endl;
}
cout<<endl;
return 0;
}
//两个代码差不多,功能相同,
差别只在memry库函数和splice库函数的区别。。memey函数会自动的对合并的链表排序。。但splice可以自己想进行排序的时候再来排序,故而splice用起来更加灵活