首先……一般来说定义一个自己的STL的话采取继承的方式比较好……避免无数麻烦。
然后是如果要自己写,那么如何把迭代器iterator和容器关联起来的问题:
http://users.cs.northwestern.edu/~riesbeck/programming/c++/stl-iterator-define.html#TOC19
见这个网站。因为这次作业不需要用到我就没看。
然后非常重要的一点就是,继承的时候,继承的类名要写全。比如:
template<class T1, class T2, class T3 = greater<T1> >
class MyMultimap :public multimap<T1, T2> {
public:
void Set(T1 key, T2 value) {
typename multimap<T1,T2>::iterator p = this->begin();
for (; p != this->end(); ++p) {
if (p->first == key) {
p->second = value;
}
}
}
friend ostream& operator<<(ostream &cout, pair<T1, T2>object) {
cout << '(' << object.first << ',' << object.second << ')' ;
return cout;
}
};
template <class T1, class T2,class T3=greater<pair<T1,T2> > >
ostream& operator<<(ostream &cout, pair<T1, T2> object) {
cout << '(' << object.first << ',' << object.second << ')' ;
return cout;
}
这一段代码在输出的时候不会是从大到小输出而是从小到大输出,我也不知道为什么。但是后来看到别人的代码,发现是继承multimap那里,要写:
class MyMultimap:public multimap<T1,T2,T3>
这样的话,才会默认你的比大小的函数是greater,要不然multimap直接默认是那里面的函数less了。注意。