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