一、
Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!
1. map构造函数;
mapmapstring; mapmapint;
mapmapstring; map< char ,string>mapchar;
mapmapchar; mapmapint;
如在打枚举中打印 “指定值对应的字符串”时,可是采用map的STL实现。
以前我们是这样打印信息出来的:
static inline const char *
VNET_TYPE_STRING(vnet_type_t type)
{
static VALUE_STRING_STRUCT g_type_string[] =
{
{ VNET_TYPE_UNKOWN, "unkown1" },
{ VNET_TYPE_SOCKET, "socket" },
{ VNET_TYPE_RDP, "rdp" },
{ VNET_TYPE_PCOIP, "pcoip" },
{ VNET_TYPE_ICA, "ica" },
{ VNET_TYPE_XRED, "xred" },
{ 0, NULL },
};
return GetValueString(g_type_string, (ULONG)type);
}
static inline const TCHAR *
GetValueString(VALUE_STRING_STRUCT *vsarray, ULONG value)
{
VALUE_STRING_STRUCT *tmp = vsarray;
while ( tmp->string != NULL )
{
if ( tmp->value == value )
{
return tmp->string;
}
tmp++;
}
return _T("unkown");
}
2. map添加数据;
map maplive;
1.maplive.insert(pair(102,"aclive"));
2.maplive.insert(map::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!
3,map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"< else cout<<"wo find 112"<
4,map中元素的删除:
如果删除112;
map::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"< else maplive.erase(l_it); //delete 112;
5,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include
运行结果是:
6.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include
7, map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
二、C++中map用法
/************************************************************************
*
* Map的特点: 1、存储Key-value对
* 2、支持快速查找,查找的复杂度基本是Log(N)
* 3、快速插入,快速删除,快速修改记
*
/************************************************************************/
#include
#include
#include
请注意上面打感叹号的地方,map的大小因此调用了“cout<<"m[c]="<
三、multimap 的使用方法
/*
*
********************************************
* multimap多重映照容器的基础说明:
********************************************
*
* multimap多重映照容器:容器的数据结构采用红黑树进行管理
* multimap的所有元素都是pair:第一元素为键值(key),不能修改;第二元素为实值(value),可被修改
*
* multimap特性以及用法与map完全相同,唯一的差别在于:
* 允许重复键值的元素插入容器(使用了RB-Tree的insert_equal函数)
* 因此:
* 键值key与元素value的映照关系是多对多的关系
* 没有定义[]操作运算
*
* Sorted Associative Container Pair Associative Container Unique Associative Container
*
* 使用multimap必须使用宏语句#include