首页 > 代码库 > Map的使用

Map的使用

1、创建

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. auto sp1 = Sprite::create("CloseNormal.png");  

  2. sp1->setPosition(Point(100,100));  

  3. this->addChild(sp1,1);  

  4.   

  5. auto sp2 = Sprite::create("CloseSelected.png");  

  6. sp2->setPosition(Point(100,200));  

  7. this->addChild(sp2,1);  


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. //创建容器  

  2. Alpha:  

  3.     auto sp_dic = Dictionary::create();//创建一个字典  

  4. beta:  

  5.     //建立一个关联容器map,第一个参数是string型的key,第二个参数是Sprite类的key值  

  6.     Map<std::string,Sprite*>sp_map;  


2、将对象放入到容器中

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. Alpha:  

  2.     sp_dic->setObject(sp1,"sp1");//将精灵放入字典中,第二个参数是精灵在字典中的key  

  3.     sp_dic->setObject(sp2,"sp2");  

  4. beta:  

  5.     sp_map.insert("sp1",sp1);//将精灵放入容器中,第一个参数是key  

  6.     sp_map.insert("sp2",sp2);  


3、取出容器中的元素
   map是键-值对的集合。map类型通常可以理解为关联数组,Vector容器可以使用类似数组a[0],a[2]这种下标的方式获得容器内的元素,Map容器也是可以通过下标的方式获取,但下标是指元素特定的键,而不是通过在数组中的位置。

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. Alpha:  

  2.     auto sp = (Sprite*)sp_dic->objForKey("sp1");//取出sp1  

  3. beta:  

  4.     auto sp = sp_vec.at("sp1");//通过键值获得sp1  


4、其他功能

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. auto sp5 = sp_map.at("sp1");//通过key取出sp1  

  2. sp_map.insert("10",sp5);//再将sp1 以三个key值的方式存入map  

  3. sp_map.insert("20",sp5);  

  4. sp_map.insert("30",sp5);  

  5.   

  6. auto _key = sp_map.keys(sp1);//获得sp1对应的key值  

  7. for(const auto&e : _key)  

  8. {  

  9.     //C++ 11 后新增的这种for 功能,不懂的可以去百度下  

  10.     CCLOG("_key is %s",e.c_str());//输出sp1 对应的key值(有四个,分别是:sp1,10,20,30)  

  11. }  

Map对象的元素是键-值对,也就是每个元素包含两个部分:键以及由键关联的值。这种键和键值组成一个pair类型,它的first元素指向键,second元素则为元素。如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. auto find_sp = sp_map.find("10");//通过find()查找key为“10”的pair类型。  

  2. auto sp6 = find_sp->second;//键对应的对象  

  3. std::string find_str = find_sp->first;//键  

  4. CCLOG("sp6 key value is %s",find_str.c_str());//打印出键  

  5. sp6->runAction(MoveBy::create(0.3f,Point(200,0)));//让sp6做运动  



Map的使用