关于STL的一些小事

首先……一般来说定义一个自己的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了。注意。

猜你喜欢

转载自blog.csdn.net/weixin_44288817/article/details/89059326