1.Sets
输出结果 1 2 3 4 5 6
typedef set<int> IntSet;
这个语句定义的IntSet类别,其实就是“元素型别为int的一个set”。这种型别有缺省的排序准则,以operator<为依据,对元素进行排序。这意味元素将以递增方式排列。如果希望以递减方式排列,或是希望使用一个完全不同的排序准则,可以用:
typedef set<int, greater<int> > IntSet;
以上所用的greater<>是一个预先定义的仿函数。
所有关联式容器都提供一个insert()成员函数,用以安插新元素:
coll.insert(3);
coll.insert(1);
不能使用push_back()和push_front()函数。
2.Multiset
如果想使用multiset。唯一需要改变的就是容器的型别
typedef multiset<int> IntSet;
由于multiset允许元素重复存在,因此其中可包含两个数值皆为1的元素。输出结果如下:1 1 2 3 4 5 6
3.Maps
Map的元素是成对的键值/实值(key/value)。
输出结果
Key: "Null" Value: 0
Key: "Pi" Value: 3.1415
Key: "VAT" Value: 0.15
Key: "an arbitrary number" Value: 4983.22
当声明容器型别的时候,必须同时指定键值(key)和实值(value)的型别:
typedef map<string , float> StringFloatMap;
Map允许你使用peerator[]安插元素:
coll["VAT"] = 0.15;
在这里,以键值为索引,键值可为任意型别。索引可以采用任何型别。
使用下标操作符,索引可疑不对应于任何元素,如果指定了一个新索引,会导致产生一个对应的新元素,并安插与map。没有任何索引是“错误”的。
Multimaps不允许我们使用下标操作符,因为multimaps允许单一索引对应到多个不同元素,而下标操作符却只能处理单一实值。
存取maps或multimaps的元素时,必须透过pair结构的first成员和second成员,才能取得键值(key)和实值(value)。
4.Multimaps
输出结果:this is a multimap of tagged strings
不过由于"this"和"is"的键值相同,两者的出现顺序也可能反过来。
元素是成对的键值/实值(key/value pair),所以必须首先生成这个pair,再将它插入群集内部。辅助函数make_pair()正是为了这个目的而打造的。
迭代器所指的是“键值/实值”对组,因此必须去除pair的成员,即first和second,因此以下语句:
pos->second
便取得了“键值/实值”对组中的第二部分,也就是multimap元素的实值(value)