题目网址:http://cxsjsxmooc.openjudge.cn/2018t3springw9/
【1:Set】
用multiset记录当前整数集数据信息
用set记录曾被加入集合的数
1 #include2 #include <set> 3 #include <string> 4 using namespace std; 5 6 7 int main() 8 { 9 10 multiset<int> s; 11 set<int> is; 12 string str; 13 int n,value; 14 s.clear(); 15 cin>>n; 16 while(n--){ 17 cin>>str>>value; 18 if(str=="add"){ 19 s.insert(value); 20 cout< endl; 21 is.insert(value); 22 } 23 else if(str=="ask"){ 24 if(is.count(value)){ 25 cout<<1<<" "; 26 } 27 else{ 28 cout<<0<<" "; 29 } 30 cout< endl; 31 } 32 else if(str=="del"){ 33 cout< endl; 34 s.erase(value); 35 } 36 } 37 return 0; 38 }
【2:热血格斗场】
lower_bound(power)返回 第一个 元素(map里的元素)的key值大于等于power值 的迭代器
1 #include2 #include
【3:冷血格斗场】
注意到相同实力值的人中,只有id号最小的那个人有可能与新人比赛,其他人可以当做不存在。
因此,这样实力值便各不相同,就仍用map即可
故需在考虑是否在map中插入新值:若新人的实力值已存在,则该实力值对应的新id为min{新人的id,该实力值当前的id};
1 #include2 #include
【4:编程填空:数据库内的学生信息】
【提示】
1、根据以下两句:
MyMultimap mp;
MyMultimapless > mp2;
这意味着模板类应有3个typename或class,并且第三个有默认值
又根据 Print(mp.begin(),mp.end()); //按 姓名从大到小 输出
应写一个自己的greater模板
2、
根据cout << * first
应该写一个
template <typename T1, typename T2>
ostream& operator << (ostream& os, pair i) ;
内容根据输出要求来写
3、
根据
mp.Set("Tom",78); //把所有名为"Tom"的学生的成绩都设置为78
Set函数用 multimap的equal_range函数来实现
4、
MyMultimap,int>::iterator p = mp.find(name);
//这里::双冒号说明是在自定义的类中再定义一个类,class iterator
但可以发现iterator其实代表std::multimap::iterator
故在自己写的 MyMultimap类中写一句
typedef typename multimap, T2>::iterator iterator;
即可
本题也可参考博客https://blog.csdn.net/iamiman/article/details/53375357
1 template<class T> 2 struct myGreater { 3 bool operator() (const T& x, const T& y) const { return x>y; } 4 }; 5 6 template> 7 class MyMultimap { 8 public: 9 multimap m; 10 typedef typename multimap ::iterator iterator; 11 MyMultimap() { 12 m.clear(); 13 } 14 void clear() { 15 m.clear(); 16 } 17 void insert(pair p) { 18 m.insert(make_pair(p.first, p.second)); 19 } 20 typename map ::iterator begin() { 21 return m.begin(); 22 } 23 typename map ::iterator end() { 24 return m.end(); 25 } 26 void Set(T1 key, T2 value) { 27 typename map ::iterator i = m.equal_range(key).first; 28 typename map ::iterator i2 = m.equal_range(key).second; 29 while(i!=i2){ 30 i->second=value; 31 i++; 32 } 33 } 34 typename multimap ::iterator find(T1 key){ 35 return m.find(key); 36 } 37 }; 38 39 template 40 ostream& operator << (ostream& os, pair i) { 41 os << "(" << i.first << "," << i.second << ")"; 42 return os; 43 }