STL中的map容器屏蔽掉自动排序

版权声明:本文为博主原创文章,如需转载请注明出处 https://blog.csdn.net/bajianxiaofendui/article/details/82840645

STL中的map容器屏蔽掉自动排序

map容器介绍

template < class Key, class T, class Compare = less,
class Allocator = allocator<pair<const Key,T> > > class map;

key:关键值的类型。在map对象中的每个元素是通过该关键值唯一确定元素的。不可重复,如果重复,根据插入方式的不同,结果不一样(a,通过[]操作符来插入,则直接替换已经存在的key对应的value值;b,通过insert,则不会更新value值)
T:映射值的类型。在map中的每个元素是用来储存一些数据作为其映射值。
compare:Comparison类:A类键的类型,它有两个参数,并返回一个bool。表达comp(A,B),comp是这比较类A和B是关键值的对象,应返回true,如果是在早先的立场比B放置在一个严格弱排序操作。这可以是一个类实现一个函数调用运算符或一个函数的指针(见一个例子构造)。默认的对于,返回申请小于操作符相同的默认值(A <B)。 Map对象使用这个表达式来确定在容器中元素的位置。以下这个规则在任何时候都排列在map容器中的所有元素。
Allocator:用于定义存储分配模型分配器对象的类型。默认情况下,分配器类模板,它定义了最简单的内存分配模式,是值独立的。

     map中默认的排序是升序排列,即插入的键值对默认根据key的值由大到小排列,测试例子如下:

#include <map>
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
	std::map<int, int> map1;
	map1.insert(std::make_pair(1, 3));
	map1.insert(std::make_pair(5, 3));
	map1.insert(std::make_pair(2, 3));
	map1.insert(std::make_pair(6, 3));
	map1.insert(std::make_pair(4, 3));

	auto it = map1.begin();
	for (; it != map1.end(); it++)
	{
		std::cout << it->first << “ ”;
	}

	return 0;
}

     输出结果为:1 2 4 5 6

屏蔽map自动排序

     如果要屏蔽掉map的自带默认排序,我们需要重写以一个排序对象

#include <map>
#include <iostream>

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;
	}
};


int _tmain(int argc, _TCHAR* argv[])
{
	std::map<int, int, DisableCompare<int>> map1;
	map1.insert(std::make_pair(1, 3));
	map1.insert(std::make_pair(5, 3));
	map1.insert(std::make_pair(2, 3));
	map1.insert(std::make_pair(6, 3));
	map1.insert(std::make_pair(4, 3));

	auto it = map1.begin();
	for (; it != map1.end(); it++)
	{
		std::cout << it->first << std::endl;
	}

	return 0;
}

     输出结果为:1 5 2 6 4

展开阅读全文

没有更多推荐了,返回首页