stl中map用法,stl中的map

  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;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: