Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 43070 Accepted Submission(s): 12081
1 #include <map> 2 #include <iostream> 3 4 using namespace std; 5 6 7 int main() 8 { 9 10 map<int,bool> setMapA; 11 int n,m,num; 12 while(cin >> n >> m) 13 { 14 if(m == 0 && n == 0) 15 { 16 break; 17 } 18 setMapA.clear(); 19 for(int i = 0; i< n;i++) 20 { 21 cin >> num; 22 setMapA.insert(pair<int,bool>(num,true)); 23 } 24 25 for(int i = 0; i< m;i++) 26 { 27 cin >> num; 28 setMapA[num] = false; 29 } 30 31 for(map<int,bool>::iterator cmp = setMapA.begin(); cmp != setMapA.end();) 32 { 33 if(!(cmp->second)) 34 { 35 setMapA.erase(cmp++); 36 }else 37 { 38 ++cmp; 39 } 40 } 41 42 if(setMapA.size() == 0) 43 { 44 cout<<"NULL\n"; 45 }else 46 { 47 int i = 0; 48 for(map<int,bool>::iterator cmp = setMapA.begin(); cmp != setMapA.end();cmp++) 49 { 50 if(i != (int)setMapA.size() -1) 51 { 52 cout << cmp->first << " "; 53 }else 54 { 55 cout << cmp->first << " \n"; 56 } 57 i++; 58 } 59 60 } 61 62 63 } 64 }
map中使用erase函数,需要注意setMapA.erase(cmp++);这样先将cmp所指节点信息删除了,再将cmp节点向前指一个;
如果setMapA.erase(++cmp);删除了下个节点的信息,后面链断了的 情况,从而造成bug
原文:http://www.cnblogs.com/songyy/p/3853369.html