C++98 STL的map 如何避免自动排序

C++11中有无序map即: unordered_map 可以不自动排序,
那么C++98中只有map 如何避免自动排序呢?

首先来看一下map的原理:
STL 中 map 其实,为了实现快速查找,map内部本身就是按序存储的(比如红黑树)。在我们插入键值对时,就会按照key的大小顺序进行存储。这也是作为key的类型必须能够进行<运算比较的原因。

大家都知道map是stl里面的一个模板类,现在我们来看下map的定义:

 map<Key, Data, Compare, Alloc>

它有四个参数,其中我们比较熟悉的有两个: Key 和 Value。第四个是 Allocator,用来定义存储分配模型的。
现在我们重点看下第三个参数: class Compare = less
这也是一个class类型的,而且提供了默认值 less。 less是stl里面的一个函数对象,那么什么是函数对象呢?

所谓的函数对象:即调用操作符的类,其对象常称为函数对象(function object),它们是行为类似函数的对象。表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个 类,其实质是对operator()操作符的重载。

// map _Pr 模板 不排序
	template<class T>
	struct DisableCompare : public std::binary_function<T, T, bool>
	{
		bool operator()(T lhs, T rhs) const
		{
			if (lhs == rhs)
				return false;
			return true;
		}
	};
```**加粗样式**

	
我们在使用的时候定义第三个参数就可以实现不排序了,注意参数类型。
```cpp
typedef std::map<int, PmCStr2ObjMap *, DisableCompare<int>> PmInt2CStrMapObjDisableMap;
typedef std::map<CString, PmInt2ObjsDMap *, DisableCompare<CString>> PmCStr2MapIntObjDisableMap;

上面的模板也可以自定义排序。

你可能感兴趣的:(STL,c++)