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

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

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple Simple

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值