+ -
当前位置:首页 → 问答吧 → 利用multiset将一个链表中的重复数据累加

利用multiset将一个链表中的重复数据累加

时间:2011-07-13

来源:互联网

利用multiset将一个链表中的重复数据累加。
#include<iostream>
#include<list>
#include<set>
#include<numeric>
#include<iterator>
#include<algorithm>

using namespace std;
void main()
{
list<int>l;
list<int>l_Result;
l.push_back(1);
l.push_back(2);
l.push_back(2);
l.push_back(4);
l.push_back(4);
l.push_back(90);
l.push_back(8);
l.push_back(2);
l.sort();
cout<<"原始链表是:"<<endl;
copy(l.begin(),l.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;

multiset<int>myset(l.begin(),l.end());
pair<multiset<int>::iterator ,multiset<int>::iterator >range;
cout<<"装入set后:"<<endl;
copy(myset.begin(),myset.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;

multiset<int>::iterator it=myset.begin();
while(it!=myset.end())
{
int count=myset.count(*it);
if(count>1)
{
range=myset.equal_range(*it);
int n=accumulate(range.first,range.second,0);
l_Result.push_back(n);
myset.erase(range.first,range.second);
it=myset.begin(); //这句是关键

}
else
{

it++;
}

}

cout<<"accumulate l_Result:"<<endl;
copy(l_Result.begin(),l_Result.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;
cout<<"multiset 去除重复后:"<<endl;
copy(myset.begin(),myset.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;

for(it=myset.begin();it!=myset.end();it++)
{
l_Result.push_back(*it);
}
cout<<"最终结果是:"<<endl;
copy(l_Result.begin(),l_Result.end(),ostream_iterator<int>(cout,"\t"));
cout<<endl;


system("pause");
}

作者: aliec   发布时间: 2011-07-13

代码展示?

作者: JingTianWen   发布时间: 2011-07-13

哪里看不懂吗,关键的一句话也标出来了。

作者: aliec   发布时间: 2011-07-13