如何实现容器元素的过滤(C++学习)
最近在学习C++中遇到需要过滤容器中的元素一事,经过揣摩现在将代码贴上,以供讨论和点评,以及他日再学习,提高。
#include<iostream>
#include<map>
#include<list>
#include <algorithm>
using namespace std;
bool greater21(int val)
{
return (val > 21)||(val == 21);
}
int main()
{
map<int,list<int> > maplistpair;
list<int> l1,l2,l3;
l1.push_back(10);
l1.push_back(11);
l1.push_back(12);
l2.push_back(20);
l2.push_back(21);
l2.push_back(22);
l2.push_back(23);
l3.push_back(30);
l3.push_back(31);
l3.push_back(32);
maplistpair[0] = l1,
maplistpair[1] = l2;
maplistpair[2] = l3;
map<int,list<int> > ::iterator map_it;
list<int>::iterator list_it,new_end;
list<int> templist;
for(map_it=maplistpair.begin();map_it!=maplistpair.end();map_it++)
{
templist = map_it->second;
for(list_it=templist.begin();list_it!=templist.end();list_it++)
{
cout << *list_it << " ";
}
cout << endl;
}
//after filter the element greater than 21
for(map_it=maplistpair.begin();map_it!=maplistpair.end();map_it++)
{
templist = map_it->second;
new_end = remove_if (templist.begin( ),templist.end( ),greater21);
templist.erase(new_end,templist.end());
maplistpair[map_it->first].clear();
maplistpair[map_it->first] = templist;
}
cout << endl;
for(map_it=maplistpair.begin();map_it!=maplistpair.end();map_it++)
{
templist = map_it->second;
for(list_it=templist.begin();list_it!=templist.end();list_it++)
{
cout << *list_it << " ";
}
cout << endl;
}
return 0;
}