effective stl: 第20条,为包含指针的关联容器指定比较类型
2016-09-22 19:31
405 查看
#include<iostream> #include<string> #include<algorithm> #include<map> #include<set> using namespace std; struct stringPtrLess : public binary_function<const string*, const string*,bool>{ bool operator()(const string* lptr, const string* rptr) const { return *lptr < *rptr; } }; struct Dereference{ template<typename T> const T& operator()(const T *ptr)const { return *ptr; } }; void print(const string* ps) { cout << *ps << endl; } bool Cmp(const string* ptr, const string* ptr2) { return *ptr < *ptr2; } int main() { set<string*> ssp; ssp.insert(new string("Anteater")); ssp.insert(new string("Wombat")); ssp.insert(new string("Lemur")); ssp.insert(new string("Panguin")); //以下方式不会是按照字母排序顺序出现的动物名称,而是4个16进制数--它们是指针的值 for (set<string*>::const_iterator i = ssp.begin(); i != ssp.end(); i++) { cout << *i << endl; } //避免编写自己的循环,如果换一种方式,但是这种方式不能通过编译,因为传给 //ostream_iterator的参数是string和string*不符合 //copy(ssp.begin(), ssp.end(), ostream_iterator<string>(cout, "\n")); //方式1: set<string*, stringPtrLess> sssp; sssp.insert(new string("Anteater")); sssp.insert(new string("Wombat")); sssp.insert(new string("Lemur")); sssp.insert(new string("Panguin")); for (set<string*, stringPtrLess>::const_iterator i = sssp.begin(); i != sssp.end(); i++) { cout << **i << endl; } //方式2: cout << "方式2:" << endl; for_each(sssp.begin(), sssp.end(), print); //方式3 cout << "方式3:" << endl; //通过解除指针引用,“转换”sssp中的每个元素并把结果写入cout transform(sssp.begin(), sssp.end(), ostream_iterator<string>(cout, "\n"), Dereference()); //注意,因为set的3个参数需要的是类型,而不是函数,因此下边的做法不可取 //set<string, Cmp> errorSet; return 0; }
每当创建包含指针的关联容器时,也要记住为该容器指定比较类型,大多数情况下,这个比较类型只是解除指针的引用,并对指针指向的对象进行比较,下边是一个为这样比较函数准备的一个模板。
struct Dereference{ template<typename PtrType> bool operator()(PtrType pt1, PtyType pt2) { return *ptr1 < *ptr2; } }; set<string*, Dereference> ssssp;
相关文章推荐
- Effective STL 为包含指针的关联容器指定比较类型
- Effective STL 为包含指针的关联容器指定比较类型
- Effective STL 为包含指针的关联容器指定比较类型
- 为包含指针的关联容器指定比较类型
- 条款20:为指针的关联容器指定比较类型——effective STL
- 为包含指针的关联容器指定比较类型
- 为包含指针的关联容器指定比较类型
- 条款20:为指针的关联容器指定比较类型
- 为指针的关联容器指定比较类型
- 为指针的关联容器指定比较类型
- 使用STL的经验总结_指定关联容器的比较类型_12
- Effective STL - 为指针的关联容器指定比较函数
- Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- effective stl 第33条:对包含指针的容器使用remove这一类算法时要特别小心
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false) .
- 关联容器存放的是指针时,自定义比较函数模板