自定义结构体作为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