stl中map用法,stl中的map
C STL映射的使用
C
STL地图的使用2009-12-11作者:tanker1024来源:tanker1024博客
1.地图简介
地图是一种关系容器。其特点是增加和删除节点对迭代器影响不大,对除操作节点外的其他节点没有影响。对于迭代器,可以修改实值,但不能修改键。
2.地图的功能
自动建立键值对应。和值可以是您需要的任何类型。根据键值,搜索的复杂度基本是Log(N)。如果有1,000条记录,最大搜索时间为10,对于1,000,000条记录,最大搜索时间为20。快速插入键值记录。快速删除记录并根据键修改值记录。遍历所有记录。3.使用地图
使用的映射必须包括映射类所在的头文件。
#include map //注意STL头文件没有扩展名。h.
Map object是一个模板类,需要两个模板参数:关键字和存储对象:
std:map int,字符串人员;
这用int和一个指向string的相关指针定义了一个索引。
为了方便起见,您可以定义模板类的类型,
typedef map int,CString UDT _ MAP _ INT _ CString;
INT _地图_ INT _ CSTRING enumMap
4.在地图中插入元素
更改map中的条目非常简单,因为map类重载了[]操作符。
enum map[1]= One ;
enum map[2]= Two ;
.
这很直观,但是有一个性能问题。插入2时,首先在enumMap中查找主键为2的项,然后在enumMap中插入一个新的对象,其键为2,值为空字符串。插入完成后,将字符串赋给‘Two’;
这个方法会将每个值赋给默认值,然后再赋给显示的值。如果元素是一个类对象,那么代价会很大。我们可以使用以下方法来避免开销:
enumMap.insert(map int,CString : value_type(2,
两个’))
5.找到并获取地图中的元素。
下标运算符给出了获取值的最简单方法:
cs string tmp=enum map[2];
但是,只有当map中有这个键的实例时,否则会自动插入一个实例,值就是初始化值。
我们可以使用Find()和Count()方法来确定一个键是否存在。
使用Find()方法查找映射是否包含关键字条目。传入的参数是要找到的键。这里需要提到两个成员,begin()和end(),分别代表map对象中的第一个条目和最后一个条目。这两种数据类型是迭代器。
int nFindKey=2;//要查找的密钥
//定义入口变量(实际上是指针)
INT _地图_INT_CSTRING:迭代器it=enum MAP . find(nFindKey);
if(it==enumMap.end()) {
//找不到
}
否则{
//找到
}
map对象的方法获得的迭代器数据类型是一个std:pair对象,它包括两个数据迭代器- first。
和iterator- second分别表示关键字和存储的数据
6.从地图中删除元素
Erase()用于删除地图中的条目
这个成员方法的定义如下
迭代器erase(迭代器it);//通过一个entry对象删除迭代器erase(迭代器优先,迭代器最后);//删除一个范围size _ type erase(const Key Key);//通过关键字删除clear()等效于enummap.erase (enummap.begin()、enum map . end());
C STL映射的使用
下面是在C中插入、搜索、遍历和删除STL图的例子:
#包含地图
#包含字符串
#包括iostream
使用命名空间std
void map_insert(map string,string *mapStudent,
字符串索引,字符串x)
{
mapStudent- insert(映射字符串,string :value_type(index,
x));
}
int main(int argc,char **argv)
{
char tmp[32]=“”;
映射字符串,字符串映射;
//插入元素
map_insert( mapS, 192.168.0.128 ,熊);
map_insert( mapS, 192.168.200.3 ,冯);
map_insert(地图, 192.168.200.33 ,熊峰);
映射字符串,string:iterator ITER;
cout 我们有第三个元素:
endl
cout -
endl
//查找元素
ITER=maps . find( 192 . 168 . 0 . 33 );
如果(iter!=mapS.end()) {
cout 找到elememt endl
“cout”是:“iter- second
endl
}否则{
cout“找不到元素”
endl
}
//参见元素
对于(ITER=地图。begin();iter!=地图。end();iter ) {
cout iter- first
iter-
第二个" " endl
}
cout -
恩德尔
map_insert( mapS, 192.168.30.23 , xf );
cout 在我们插入一个元素后:
恩德尔
cout -
恩德尔
对于(ITER=地图。begin();iter!=地图。end();iter ) {
cout iter- first
iter-
第二个" " endl
}
cout -
恩德尔
//删除元素
ITER=地图。查找( 192。168 .200 .33 );
如果(iter!=mapS.end()) {
cout 查找元素:
ITER-第一端;
“cout”删除元素:“iter- first
恩德尔
cout =============================
恩德尔
地图。擦除(ITER);
}否则{
cout "找不到元素"
恩德尔
}
对于(ITER=地图。begin();iter!=地图。end();iter)
{
cout iter- first
iter-
第二个" " endl
}
cout =============================
恩德尔
返回0;
}