stl容器之--自定义结构体作为stl容器元素成员的使用
来源:互联网 发布:mac截屏保存在哪里 编辑:程序博客网 时间:2024/06/05 20:06
自定义结构体作为stl容器元素成员的设计要求之一是:在对待自定义类型时和内置类型必须是一致的,甚至自定义类型的支持更好。
《C++标准程序库》:
set和multiset
set和multiset会根据特定的排序准则,自动将元素排序。两者不同在于multiset允许重复而set不允许。
只要是assignable、copyable、comparable(根据某个排序准则)的型别T,都可以成为set或multiset的元素型别。没有传入特别排序准则,就采用缺省准则less(这是一个仿函数,以operator<对元素进行比较,一般完成排序)。对于“排序准则”,必须是“反对称的”,必须是“可传递的”,必须是“非自反的”(x<x永远为假),所以排序准则可以用于相等性检验。
Lists
Lists使用一个双向链表来管理元素。任何型别只要具备assignable和copyable两性质,就可以作为list的元素。
Maps和Multimaps
Map和Multimap的元素型别Key和T,必须满足一些两个条件:
1、key/value必须具备assignable和copyable性质。
2、对排序准则而言,key必须是comparable。
使用set作为stl容器元素成员的例子如下:
#include <iostream>#include <string>#include <set>using namespace std;struct A{A():str(""),score(0){}//default constructionA(const A& a):str(a.str),score(a.score){}//copyablebool operator <(const &rhs)const{return score < rhs.score;}//comparableA& operator = (const rhs)//assignable{str = rhs.str;score = rhs.score;}string str;int score;}; void test(){set<A>s;A a,b,c;a.str="a";a.score=1;b.str="b";b.score=2;c.str="c";c.score=3; A cpy(a);cout<<"orign:"<<a.str<<','<<a.score<<endl;cout<<"copy:"<<cpy.str<<','<<cpy.score<<endl; A assigned;assigned = a;cout<<"assigned:"<<assigned.str<<','<<assigned.score<<endl; cout<<"a<b?"<<(a<b?"true":"false")<<endl; s.insert(a);s.insert(b);s.insert(c); cout<<"size:"<<s.size()<<endl;} int main() { test(); return 0;}
程序输出:
orign:a,1
copy:a,1
assigned:a,1
a<b?true
size:3
0 0
- stl容器之--自定义结构体作为stl容器元素成员的使用
- 什么样的对象才能作为STL容器的元素
- STL容器之 元素删除
- auto_ptr预防作为STL容器元素的实现。
- auto_ptr智能指针不能作为STL标准容器的元素
- STL容器的使用
- STL容器元素的删除
- C++之STL基本容器的使用
- STL之容器作为形参的传递
- STL之map容器使用
- C++ 之高效使用STL (STL 容器的选择)
- C++ 之高效使用STL (STL 容器的选择)
- STL之七:STL各种容器的使用时机详解
- C++ 之高效使用STL (STL 容器的选择)
- STL之七:STL各种容器的使用时机详解
- STL之七:STL各种容器的使用时机详解
- 闲谈STL容器之size()成员函数
- STL容器之删除元素,迭代器失效
- 操作系统中10种页面置换算法的总结
- ios 修改应用名称
- 通过UIView获取UIViewController
- 解题报告 之 POJ2769 Reduced ID Numbers
- android点击事件在不同级别view中的优先级问题
- stl容器之--自定义结构体作为stl容器元素成员的使用
- SpringMVC和Hibernate整合
- Windows远程桌面访问Ubuntu 12.04 之安装XRDP
- makefile中的patsubst/notdir/patsubst
- 一步一步教你做ios推送
- Logo
- Valid Palindrome
- 未来的自己
- 创建运行ArcGis JS API 项目