码迷,mamicode.com
首页 > 其他好文 > 详细

stl容器之--自定义结构体作为stl容器元素成员的使用

时间:2015-05-12 15:41:26      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

自定义结构体作为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 construction
	A(const A& a):str(a.str),score(a.score){}//copyable
	bool operator <(const &rhs)const{return score < rhs.score;}//comparable
	A& 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

 




stl容器之--自定义结构体作为stl容器元素成员的使用

标签:

原文地址:http://blog.csdn.net/chenjiayi_yun/article/details/45642659

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!