好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

phpmap容器 php容器技术

很多站长朋友们都不太清楚phpmap容器,今天小编就来给大家整理phpmap容器,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 如何在 map 容器中使用 find 2、 map的常用用法详解 3、 清空map的方法 4、 哪些类型可用做 map 容器对象的下标?下标操作符返回的又是什么类型 5、 #include 6、 "pv","data"=>$pv))用JAVA怎么表示' title='PHP中的array(array("name"=>"pv","data"=>$pv))用JAVA怎么表示'>PHP中的array(array("name"=>"pv","data"=>$pv))用JAVA怎么表示 如何在 map 容器中使用 find

count(n) 返回容器中n出现的次数 find(n) 返回指向元素n的迭代器 祝你愉快,满意请采纳哦

map的常用用法详解

map是一种映射,是常用的STL容器。(map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器))

如需使用,需要加一个map头文件。

1.map的定义:

map mp;

使用map要确定映射前类型(键key)和映射后的类型(值value)。

注意:如果是字符串到整形的映射,必须使用string而不是char数组。

例子:

(1)map<set ,string>mp;</set

2.map容器内元素的访问:

(1)通过下标访问:

比如:

map mp;

mp['c']=20;

mp['c']=30;

printf("%d",m['c'])输出的是30;

(2)通过迭代器访问:

定义方式:

map ::iterator it;

map迭代器的使用方式和其他STL容器的迭代器不同,因为map的每一对映射都有两个typename,这决定了必须能通过一个it来同时访问键和值。事实上,map可以使用it->first来访问键,使用it->second来访问值。

3.map常用函数实例解析:

(1)find()

find(key)返回键为key的映射的迭代器,时间复杂度为N(logN),N为map中映射的个数。

(2)erase()

erase有两种用法:

第一种:删除单个元素,删除一个区间内的所有元素。

删除单个元素的方法==》mp.erase(it),it为删除的元素的迭代器,时间复杂度为O(1)。

mp.erase(key),key为欲删除的键。时间复杂度为O(logN),N为map内元素的个数。

第二种:删除一个区间内的所有元素。

mp.erase(firse,last)删除[first,last).

时间复杂度O(last-first)

(3)size()

size()用来获得map中映射的对数,时间复杂度为O(1)。

(4)clear()

clear()用来清空map中的所有元素,复杂度为O(N),其中N为map中的元素的个数。

4.map的常见用途:

1.需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量。

2.判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组用。

3.字符串和字符串的映射有时候也会遇到!

清空map的方法

方法如下:

操作设备:戴尔笔记本电脑

操作系统:win10

操作程序:map容器2.91

1、map容器删除某个条目,可以通过获取到的迭代器对象进行删除,下图标示的代码段,通过find查找到容器中的对象,使用返回的迭代器对象作为erase的入参,将条目删除。

2、从输出的打印结果看,erase成功的删除了通过find查找到的条目。

3、map类提供erase函数多个函数重载,可以通过传入关键字将条目删除。

4、从输出结果看,通过关键字成功删除关键字对应的条目。

5、如果想要删除整个容器的内容,通过传入开始和结束两个参数到erase函数中进行删除操作。

6、从下图输出的结果看,map容器中所有数据已经被删除,因此,没有输出内容。

7、除了上面提供的方法可以删除map容器的所有内容外,map提供了另外一个函数clear,该函数同样可以删除map容器的所有内容。

哪些类型可用做 map 容器对象的下标?下标操作符返回的又是什么类型

1.CArrayVS::std::vector?CArray和::std::vector一样,都是模板类,用于管理任意类型的对象的动态数组。都在解构时释放所管理的动态内存。因此都可以用于代替手工动态数组管理。但是,CArray是在C++标准化之前很多年(VC++2.0时代)设计的,当时对C++程序设计,面向对象程序设计,模板程序设计等技术认识严重不足,尤其是当时对面向对象技术的错误信仰与宣传,造成CArray的设计有重大错误。在C++语言标准化以后(1998),以及VC++6.0出世以后,提供了标准的::std::vector模板,基本上在任何方面都要优于CArray。Microsoft由于要支持老的程序,因此一直保留了CArray,但显然并没有打算按照新的思想去发展它(至少应该提供operator=(CArrayconst)吧)。概括起来,CArray与::std::vector有以下不同:1)CArray是MFC中的,::std::vector存在于任何标准的C++实现中。因此,你用熟了CArray也只能在MFC中用,若用熟了::std::vector,你可以在任何平台的任何C++编译器下使用。使用标准的部件也有利于别人理解你的程序。.CArray继承了CObject,仅仅为了实现serialization,这是不恰当的,违反了"Youdon'tpayforwhatyoudon'tuse."的C++设计原则。::std::vector没有继承任何东西,只是实现了管理一个动态数组该做的事。2)CArray不是一个恰当的值类型,例如下列操作都是不合法的:CArraya;CArrayb(a);//error,mustuseCopy().b=a;//error,mustuseCopy().b==a;//error,youmustwriteyourown.b相反,::std::vector是一个认真设计的值类型,天生是可以拷贝构造和可赋值的。如果T是可比较的,那么::std::vector将自动地是可以比较的。此外,由于涉及到四个特殊成员函数;T();//缺省构造函数(defaultconstructor)~T();//解构函数(destructor)T(Tconst);//拷贝构造函数Toperator=(Tconst);//拷贝赋值函数的自动生成,如果使用CArray()作为T的成员变量,那么上述的四个特殊函数中的后两个将无法自动生成,需要手工写:structT{T(){}T(Tconstt){a_.Copy(t.a_);i_=t.i_;d_=t.d_;s_=t.s_;}Toperator=(Tconstt){if(this!=t){a_.Copy(t.a_);i_=t.i_;d_=t.d_;s_=t.s_;}return*this;}private:CArraya_;inti_;doubled_;::std::strings_;};如果使用::std::vector:structT{private:::std::vectora_;inti_;doubled_;::std::strings_;};上面列出的三个特殊成员函数都不需要写。好处是明显的:当你增减T的成员变量时,你不必到T(Tconst)和operator=()中去相应地增减。3)没有现成的算法可以对CArray进行操作,而标准C++里的标准算法大多都可以直接在::std::vector上运行。例如:staticintconstinit_vals[]={3,1,4,1,6,9};vectora(init_vals,init_vals+6);*find(a.begin(),a.end(),6)=5;//把6改成5sort(a.begin(),a.end());//排序。可以说,CArray的主要设计错误是把一个本来应该是一个简单的“值”类型的东西设计成一个难用的“对象”类型了。所有的“值”的好特性都丧失了,但那些从CArray继承的派生类呢?CByteArray等的问题与CArray的问题一样,甚至(例如,CPtrArray,永远不要用)。同样,其他的MFCcontainer模板,象CMap,CList等,都有类似问题,都应该用::std::map,::std::list等设计更好的东西代替。2.::std::vector在哪里?::std::vector在头文件中定义:(注意,标准的C++头文件都没有.h后缀,有.h的文件是与C兼容的,或支持老的不标准的东西,象。)namespacestd{template>structvector{//具体内容稍后讨论};templatebooloperator==(vectorconsta,vectorconstb);templatebooloperator!=(vectorconsta,vectorconstb);templatebooloperatorconsta,vectorconstb);templatebooloperator>=(vectorconsta,vectorconstb);templatebooloperator>(vectorconsta,vectorconstb);templatebooloperator>=(vectorconsta,vectorconstb);}vector定义在namespacestd中,使用时为了减少击键次数,通常使用一个类型定义缩短类型名称:#includetypedef::std::vectorIntVector;IntVectora;IntVectorb(a);IntVectorc;c=b;assert(a==c);请注意中定义了六个vector的比较函数。这些函数只在真的用到时才会被实例化,才会要求T也提供operator==()和operator:用于提供一个用户定义的存储管理类。由于这个参数很少用到,而且在VC++6的实现中有问题,不能用,因此以下的讨论忽略这一部分的内容。3.::std::vector中的类型定义vector中定义了一些类型,下面只列出常用的:typedefTvalue_type;typedefT0iterator;typedefT1const_iterator;typedefT2reverse_iterator;typedefT3const_reverse_iterator;value_type就是vector的元素类型,也就是T。当写通用的算法处理任意类型的vector或其他容器类型时是很有用的。iterator/const_iterator是两个vector的实现定义的未知类型,用于访问vector中的元素,类似于T*/Tconst*指针,他们的区别是一个指向的元素可被修改,另一个只可以读:typedef::std::vectorIntVector;IntVector::iteratoriter;IntVector::const_iteratorc_iter;//++iter;iter++;//ok:increment,post-increment.--iter;iter--;//ok:decrement,post-decrement.++c_iter;c_iter++;//ok:increment,post-increment.--c_iter;c_iter--;//ok:decrement,post-decrement.*iter=123;//ok.intk=*iter;//ok.k=*--c_iter;//ok.*c_iter=k;//error.c_iter=iter;//ok:iteratorisconvertibletoconst_iterator.iter=c_iter;//error:can'tconvertconst_iteratortoiterator.在使用上iterator/const_iterator和T*/Tconst*基本相同,事实上有些vector的实现里就是用T*/Tconst*实现iterator/const_iterator的,但又不可以把iterator/const_iterator当作真正的T*/Tconst*:T*p=iter;//mayfailtocompile.Tconst*q=c_iter;//mayfailtocompile.reverse_iterator/const_reverse_iterator与iterator/const_iterator类似,但以相反的次序(从尾至头)访问vector中的元素。各种各样的iterator在STL中有特别重要的意义,但这里我们不做具体介绍。只要理解通过iterator可以访问vector中的元素,大概相当于一个指示位置的指针就行了。4.::std::vector的构造vector提供了以下构造函数:(忽略allocator参数)vector();vector(size_tn,Tconstt=T());vector(vectorconst);vector(const_iteratorfirst,const_iteratorlast);1)vector();构造一个空的vector,不包含任何元素。IntVectorv1;//空的整数向量。2)vector(size_tn,Tconstt=T());构造一个n个相同元素t组成的vector。如果不给出t,那么将用T()做缺省值:IntVectorv2(100,1234);//100个1234.IntVectorv3(100);//100个0。3)vector(vectorconstother);复制构造函数,复制other中的内容:IntVectorv4(v2);//100个1234。4)vector(const_iteratorfirst,const_iteratorlast);事实上,这个构造函数应该为templatevector(Iterfirst,Iterlast);即拷贝任意的序列[first,last)到vector中。由于VC++6sp0编译程序的限制,Iter被换为const_iterator了。不过,碰巧const_iterator就是Tconst*,所以可以如下使用:inta[]={1,2,3,4,5};IntVectorv5(a,a+5);//{1,2,3,4,5}IntVectorv6(v5.begin()+2,v5.end());//{3,4,5}5.访问vector中的元素以下成员函数/运算符用于访问vector中的一个元素:Tat(size_tn);Tconstat(size_tn)const;Toperator[](size_tn);Tconstoperator[](size_tn)const;Tfront();Tconstfront()const;Tback();Tconstback()const;请注意,由于vector是一个“值”语义的对象,所有的操作函数都必须严格保证const的正确性。所以,所有的元素访问方法都有const和非const两个版本。at(n)和operator[](n)都返回下标为n的元素的引用,他们的区别是,at()进行下标越界检查,若发现越界,抛出range_error异常,operator[]不进行下标检查。front()返回下标为0的元素的引用,back()返回最后一个元素的引用。inta[]={4,1,4,1,5,8};IntVectorv(a,a+6);//使用front(),back():v.front()=3;v.back()=9;//使用operator[]():for(size_ti=0;i的存储管理以下成员函数用于存储管理:voidreserve(size_tn);size_tcapacity()const;voidresize(size_tn,Tt=T());voidclear();size_tsize()const;boolempty()const{returnsize()==0;}size_tmax_size()const;另外,push_back(),insert()等也涉及到存储管理,后面另行介绍。1)max_size()返回vector理论上可以装的最多T的个数。这只是一个理论上的数字,大概是4GB/sizeof(T),没有多大实用价值。在程序中不要用。2)size()返回vector中实际装的T的个数。相当于CArray::GetSize()。3)empty()如果vector中没有任何T对象,返回true。也就是返回size()==0。4)clear();清除vector中的所有T对象。执行后empty()返回true。大致相当于resize(0),但不要求T可被缺省构造。相当于CArray::RemoveAll()。5)resize(size_tn,Tt=T());将vector中的元素个数设置为n,n可以大于size()也可以小于size。如果n小于size(),那么vector中下标为n..size()-1的元素都将被解构。如果n>size(),那么将在vector的后面新增加n-size()个相同的元素t。在增大vector时,可能发生存储再次分配。总之,调用resize(n,t)后,(size()==n)成立。请注意,如果调用resize(n)不带参数t,那么T必须可以缺省构造。6)reserve(size_tn);事先分配至少可以保存n个T对象的空间。调用后(capacity()>=n)成立。7)capacity();返回已经分配的存储空间够容纳的T类型对象的个数。后续的增加元素操作(如push_back(),insert())如果增加元素后vector中的总元素个数不超过capacity(),那么vector的实现保证不重新分配存储空间。vector管理的动态存储空间是连续的。执行操作IntVectorv(7,1);//sevenones.v.reserve(12);后,v的状态可以用下图表示:/--size()---\|1|1|1|1|1|1|1|-|-|-|-|-|\--capacity()---------/其中,1是已经构造的int类型的对象,-是可以构造一个int类型的对象,但还没有构造的原始空间。再执行v.push_back(2);v.push_back(3);后,v的状态可用下图表示:/----size()-----\|1|1|1|1|1|1|1|2|3|-|-|-|\----capacity()-------/执行resize(11,4);后:/----size()---------\|1|1|1|1|1|1|1|2|3|4|4|-|\----capacity()-------/capacity()>=size()总是成立的。对于下标为[size()..capacity()-1]的未构造对象的存储空间,是不可以访问的:v[11]=5;//undefinedbehavior-anythingcanhappen.7.添加元素到vector中下列操作添加元素到vector中,并可能引起存储分配:voidpush_back(Tconstt);voidinsert(iteratorpos,Tconstt=T());voidinsert(iteratorpos,size_tn,Tconstt);templatevoidinsert(iteratorpos,Iterfirst,Iterlast);push_back()是把一个元素添加到vector的末尾。insert()是把一个t,或n个t,或从first开始到last结束的一个序列插入到pos指示的位置之前。当插入元素后size()将会大于capacity()时,将引起自动存储分配。vector将会分配一个比需要的存储区大若干倍(通常是1.5到2)的新的存储区,把老的元素拷贝过去,同时完成添加或插入,然后释放老的存储区。这就是说,vector自动存储分配的空间大小是指数式增长的,这可以保证多次添加元素到vector中时,平均用时是接近于常数的。IntVectorv;//add0,1,,99tov:for(inti=0;i<100;++i)v.push_back(i);//append9,8,7,,0totheend:inta[]={9,8,7,6,5,4,3,2,1,0};v.insert(v.end(),a,a+10);8.删除元素下列成员函数完成元素删除:voiderase(iterator);voiderase(iteratorfirst,iteratorlast);voidpop_back();voidclear();这些函数分别删除一个,一串,最后一个,或全部元素。IntVectorv;for(inti=0;i<100;++i)v.push_back(i);//删除50,51,,89:v.erase(v.begin()+50,v.end()-10);//删除49,48:v.pop_back();v.pop_back();//全部删除:v.clear();注意,删除操作不会引起存储分配,因此capacity()不变。

#include

map是一种关联容器,它定义了一种数据结构,类似查表功能,每一个数据都有自己的键值,通过键值可以查找和排序相应的数据。

包含了这个头文件,就可以使用map这种数据结构

"pv","data"=>$pv))用JAVA怎么表示'>PHP中的array(array("name"=>"pv","data"=>$pv))用JAVA怎么表示

Java中的键值对一般用Map容器

Map m1 = new HashMap();

m1.put("name",pv);

m1.put("data", pv);

$pv可以表示变量,也可以表示对象

关于phpmap容器的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phpmap容器 php容器技术的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167952
更新时间:2023-03-31   阅读:47次

上一篇: 论坛用javaphp 论坛用户名

下一篇:包含lavavelphp的词条

相关资讯

最新资料更新

  • 1.DEDECMS后台登陆空白排查错误原因
  • 2.dedecms教程之dedecms生成速度提速的方法
  • 3.dede:arclist 标签排序具体实现
  • 4.织梦DedeCms的安全问题解决办法(安全设置)
  • 5.dedecms列表页调用文章正文内容的方法
  • 6.dedecms织梦手机模板使用和制作方法
  • 7.增加dedecms后台留言管理功能
  • 8.DedeCms开启多站点支持绝对网址后生成RSS错误的修改方法
  • 9.DedeCms模板防盗以及安全设置的一些小技巧
  • 10.在自己的php页面中使用dedecms标签的代码示例
  • 11.DEDECMS 留言薄模块的使用方法
  • 12.加快织梦dedeCMS内容生成速度方法
  • 13.使用dedecms搭建自己的本地网站(全程图解)
  • 14.dedecsm模板中首页如何实现分页的三种方法比较分析
  • 15.DedeCms后台登录一片空白的解决方法
  • 16.dedecms列表页与详情页调用tag标签的方法
  • 17.完美织梦DeDeCMS 5.6 升级 5.7 SP1版解决方案
  • 18.Dedecms无法保存远程图片到本地服务器的解决方法
  • 19.详解dede:list和dede:arclist列表按权重排序修改方法
  • 20.DEDECMS系统分页标签自定义二次开发实例

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]