041:Set
multiset和set区别在于 前者可包含重复元素
1.创建一个set变量set2 用来记录进入过整数集的整数(利用唯一性),multiset变量mset用来管理整数集的所有整数(可包括重复的)
1 #include <iostream> 2 #include <set> 3 #include <cstdio> 4 using namespace std; 5 6 int main(){ 7 multiset<int> mset; 8 set<int> set2; 9 int n,x;string order; 10 scanf("%d",&n); 11 while(n --){ 12 cin >> order >> x; 13 switch(order[1]){ 14 case 'd': 15 mset.insert(x); 16 set2.insert(x); 17 printf("%d\n",mset.count(x)); 18 break; 19 case 'e': 20 printf("%d\n",mset.erase(x)); //erase的返回值就是删除前的个数! 21 break; 22 case 's': 23 int t = set2.find(x) == set2.end() ? 0 : 1; 24 printf("%d ",t); 25 if(t == 1) printf("%d\n",mset.count(x)); 26 else printf("0\n"); 27 break; 28 } 29 } 30 return 0; 31 }
2.也用一个数组来记录进入过整数集的整数
1 #include <iostream> 2 #include <set> 3 #include <cstdio> 4 using namespace std; 5 bool wasAdd[100001]; 6 7 int main(){ 8 multiset<int> mset; 9 int n,x;string order; 10 scanf("%d",&n); 11 while(n --){ 12 cin >> order >> x; 13 if(order == "add"){ 14 mset.insert(x); 15 wasAdd[x] = true; 16 printf("%d\n",mset.count(x)); 17 } 18 else if(order == "del"){ 19 printf("%d\n",mset.erase(x)); 20 } 21 else{ //ask 22 int t = wasAdd[x] == false ? 0 : 1; 23 printf("%d ",t); 24 if(t == 1) printf("%d\n",mset.count(x)); 25 else printf("0\n"); 26 } 27 } 28 return 0; 29 }

浙公网安备 33010602011771号