map的特性是,所有的元素会根据键值自动排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一个元素被视为键值,第二个被视为实质
piar 的定义templatestruct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; //为public T2 second;//为public pair():first(T1()),second(T2()){} pair(const T1&a,const T2&b):first(a),second(b){} };
注意:
1.使用map不能修改元素的key,这会影响map元素的排列规则,会破坏map组织2.可以修改元素的value3.标准的STL的map以RB-tree为底层机制,由于map所开放的各种操作接口,所以几乎map操作行为都是调用RB-tree的操作行为map的源码
template,class Alloc=alloc> class map{ public: typedef key key_type; typedef T data_type; typedef T mapped_type; typedef pair value_type; typedef Compare key_compare; /*以下是定义的仿函数,用于比较排序 class value_compare :public binary_function { firend class map ;//与map友元 protect: compare comp; value_compare(Compare c):comp(c){} public: bool operator(const value& x,const value_type&y)const { return comp(x.first ,y.first); } } private: /*以下定义表述型别。以map元素型别(一个pair)的第一型别,作为RB-tree节点的键值型别 typedef rb_tree ,key_compare,Alloc>rep_type; rep_type t; public: typedef typename...... //类型名的重命名 map():t(Compare()) {}.........//map的构造以及map的各种操作 }
从map中的源码首先可看出
1.map和RB-tree的关系2.map中以pair为第一型别又被typedef为value_type3.比较时用到了仿函数友元函数以下是测试程序,经过思考pair是结构体,我们也可以输入结构体达到>=2参数的输入以及使用//#include "stdafx.h" #include#include #include