c++ map是有序还是无序的_map的默认排序和自定义排序
STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N)。
一般而言,使用map的时候直接采取map的形式即可,map的内部实现默认使用A类型变量的升序来排序map的值。
但是有时我们需要对map的值做特殊的排序(不经其他容器的辅助),这就需要在定义map变量时做些特殊的处理。
STL中map的定义是:
1 template,4 class _Alloc = allocator>>
5 classmap6 : public _Tree<_tmap_traits _ty _pr _alloc false>>
7 {
这是一个模板类,我们的特殊处理主要改造的就是class _Pr = less<_kty>,并且从这里我们也能看到,无论做哪种修改,排序都是针对key而言的,要实现value的自定义排序,
不是修改_Pr类型能完成的。
替换_Pr的也必须是一个类型,即至少我们要自己创建一个类型,用来做key的比较。自然,我们需要做的是重载函数调用操作符"()",一般的形式为
1 classT{2 public:3 bool operator()(const T& lhs, const T& rhs)const
4 {5 ...6 }7 };
代码需包含头文件、。
下面是常见的一些自定义排序:
a.对基本类型的key以降序排列
map默认提供的是less<_kty>类型的排序方式,阅读STL源码</
STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N)。 一般而言,使用map的时候直接采取map的形式即可,map的内部实现默认使用A类型变量的升序来排序map的值。 但是有时我们需要对map的值做特殊的排序(不经其他容器的辅助),这就需要在定义map变量时做些特殊的处理。 STL中map的定义是: 1 template,4 class _Alloc = allocator>> 5 classmap6 : public _Tree<_tmap_traits _ty _pr _alloc false>> 7 { 这是一个模板类,我们的特殊处理主要改造的就是class _Pr = less<_kty>,并且从这里我们也能看到,无论做哪种修改,排序都是针对key而言的,要实现value的自定义排序, 不是修改_Pr类型能完成的。 替换_Pr的也必须是一个类型,即至少我们要自己创建一个类型,用来做key的比较。自然,我们需要做的是重载函数调用操作符"()",一般的形式为 1 classT{2 public:3 bool operator()(const T& lhs, const T& rhs)const 4 {5 ...6 }7 }; 代码需包含头文件、。 下面是常见的一些自定义排序: a.对基本类型的key以降序排列 map默认提供的是less<_kty>类型的排序方式,阅读STL源码</