map key char*

STL中map的key能否用char 呢?当然可以!
在程序中需要用到一个map,本来是这样写的,
map<string, int> mapStr;
为了追求效率,把string改成了char

map<char , int> mapStr;
结果呢?
可想而知,每次放进去的是指针,
当查找的时候就出问题了,总是找不到。
因为key中存放的是指针,当然找不到了。
需要重载一下操作符,当查找时比较指针对应的字符串就可以了。
修改如下:
struct ptrCmp
{
bool operator()( const char
s1, const char * s2 ) const
{
return strcmp( s1, s2 ) < 0;
}
};
map<char , int, ptrCmp> mapStr;
再进行查找就OK了!
===========================
C++ map中key使用指针的问题 (2012-12-07 08:19:28) 转载▼
标签: map find失败 find不到结果 分类: 调试
C++实际开发的过程会经常使用到map。map是一个key-value值对,key唯一,可以用find进行快速的查找。其时间复杂度为O(logN),如果采用for循环进行遍历数据时间复杂度为O(N)。如果map中的数据量比较少时,采用find和for循环遍历的效率基本没有太大的区别,但是在实际的开发过程中,存储在map中的数据往往是大量的,这个时候map采用find方式效率比遍历效率高的多。
确定采用find方式查找数据后,我们需要考虑存储map的空间复杂度,对于基础数据类型的数据(int char等)这里就不做讨论。本文讨论的是map中存储的数据结构struct情况。
1、如果map中的key为struct此时,需要先对struct进行操作符重载,关于这部分内容可以参考C++ 重载操作符示例
2、map中的key只能是对象,而不能是指针。(这一点尤为重要)。下面给出三个map定义进行说明:
std::map<NHSymbolkey, Stru_NHSymbol>
pmapNHSymbolInfo1
std::map<NHSymbolkey, Stru_NHSymbol> pmapNHSymbolInfo2
std::map<NHSymbolkey, Stru_NHSymbol>* pmapNHSymbolInfo2
其中,pmapNHSymbolInfo1、pmapNHSymbolInfo2中使用find正常,遍历也正常,pmapNHSymbolInfo3使用find查找不到对应的数据(数据已经存在,find不到,遍历可以找到)
原因:std::map<NHSymbolkey, Stru_NHSymbol>* pmapNHSymbolInfo2在find的时候是根据指针进行查找的。而在数据insert时,数据都是new的,每次new出的地址是不一样的,在find数据时,根据地址查找结果就找不到数据。通过遍历是取出地址中内容一一比较,这样能够找到数据。
pmapNHSymbolInfo1、pmapNHSymbolInfo2两种方式都可以使用find方式查找数据,但是pmapNHSymbolInfo1中Stru_NHSymbol为对象,这样会使map占用空间比较大,pmapNHSymbolInfo2的Stru_NHSymbol为指针,存储时地址占用空间小,但是每次都是new处理来的,所有一定要记住使用完成后一定要delete,否则会出现内存泄露。

3、 map插入数据2中方式比较
std::map<NHSymbolkey, Stru_NHSymbol> pmapNHSymbolInfo
pmapNHSymbolInfo->insert(std::make_pair(pNHSymbolkey, pNHSymbol));该方式的key如果出现重复,则会插入数据失败;
(*pmapNHSymbolInfo)[objNHSymbolkey] = pNHSymbol;该方式的key如果出现重复则直接覆盖掉原来的数据,永远不会出现插入失败的问题。

结论:C++ map中key不要使用指针,请直接使用对象。

转载于:https://www.cnblogs.com/Corphish/articles/7409786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深扒ASML 的玩法,对工控企业生态圈的思考

来源&#xff1a;中国传动网自从美国的新一轮技术封锁发生后&#xff0c;普天之下的吃瓜群众为华为操碎了心&#xff0c;甚至卖菜的大妈偶尔讨论这件事。由此可见&#xff0c;半导体对国家科技、工业的影响有多大。半导体制造产业中&#xff0c;光刻机是核心设备&#xff0c;对…

c语言第一周作业答案,C语言程序设计下mooc答案.pdf

《C语言程序设计下mooc答案.pdf》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言程序设计下mooc答案.pdf(27页珍藏版)》请在装配图网上搜索。1、2016.03.2806.30 北京理工大学 MOOC C语言程序设计(下)网上作业答案 第一周编程作业 1、求最大公约数和最小公倍数(…

吃货联盟

public class eat {public static void main(String[] args) {Scanner input new Scanner(System.in);String[] names new String[4]; // 订餐人名字String[] dishMegs new String[4]; // 保存所选的信息,包括菜品名及份数int[] times new int[4]; // 保存订餐时间double[]…

2019-2020年人工智能产业发展深度报告

来源&#xff1a;华泰证券人工智能市场格局人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是利用机器学习和数据分析方法赋予机器模拟、延 申和拓展类人的智能的能力&#xff0c;本质上是对人类思维过程的模拟。AI 概念最早始于 1956 年 的达特茅斯会…

c语言求字符串复制函数,快速上手系列-C语言之字符串处理函数(一)

C语言中常用的字符串操作函数&#xff0c;有比如计算字符串长度、字符串拷贝&#xff0c;字符串比较等这样的整体操作函数&#xff0c;有字符串查询函数&#xff0c;也有字符串转换函数等等&#xff0c;这里先介绍字符串整体操作函数。字符串整体操作函数实际编程中&#xff0c…

宇宙的第一推动力,必然存在吗?

《创造世界与逐出乐园》&#xff08;The Creation of the World and the Expulsion from Paradise&#xff09;&#xff0c;乔万尼迪保罗&#xff08;Giovanni di Paolo&#xff09;&#xff0c;1445年&#xff0c;© 公共领域文/StillJustJames译/苦山校对/光明左使原文/m…

c语言编程安全队列,C语言编程队列的实现

queue.c功能函数&#xff1a;#include "queue.h"static void CopyToNode(Item item,Node *pn){pn->item item;}static void CopyToItem(Node *pn, Item *pi){*pi pn->item;}/* 把队列初始化为空&#xff0c;就是设置尾指针为NULL并设置项数(items成员)为0 */…

良好编程习惯的养成

在开发中&#xff0c;一个良好的编程习惯对这个团队也是一种带动作用&#xff0c;今天在网上看到了一坨这样的代码和屎&#xff0c;他恶心了&#xff01;再次强调 一定要注意代码的缩进和格式化&#xff01;&#xff01;切记&#xff01;切记&#xff01;&#xff01; 一定 不可…

科技部:学术不端零容忍!违规人员所获职称、奖金等全部清退归零

文章 | 募格学术来源 | 科技部、科奖中心、新京报国务院新闻办公室2020年5月19日下午举行新闻发布会&#xff0c;介绍加快建设创新型国家、支撑引领高质量发展有关情况。科技界的学风和作风一直都是各方高度关注的问题&#xff0c;科技部是如何加强科技界的作风和学风建设的&am…

c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*************************************************查询函数**********************************************/void search(){int flag,j,x;char w[20];FILE *fp;char v[20];printf("(1)按作者\n");printf("(2)按…

一文看懂台积电的研发实力

来源&#xff1a;内容来自「台积电财报」&#xff0c;谢谢。在一个月的文章《这才是台积电的真正实力》中&#xff0c;我们对台积电公司的实力做了一个概述。今天&#xff0c;我们从台积电去年底的研发投入和成果&#xff0c;看清这家晶圆代工巨头的真正技术实力。研发团队之组…

c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用

原标题&#xff1a;C语言总结之异或运算的一些特性及巧妙应用1&#xff0e;一个数和自己做异或的结果是0。如果需要一个常数0&#xff0c;x86平台的编译器可能会生成这样的指令&#xff1a;xorl %eax, %eax。不管eax寄存器里的值原来是多少&#xff0c;做异或运算都能得到0&…

VS2015 IIS Express 无法启动 解决办法(转)

因为安装各种乱七八糟的软件&#xff0c;然后不小心把IIS Express卸载掉了&#xff0c;网上下载了一个IIS Express 7&#xff0c;安装之后本地使用VS 2015无法启动调试&#xff0c;F5 无法启动IIS&#xff0c; 再次F5调试&#xff0c;没有反应IIS Express没有启动。 日志记录错…

【数字孪生】数字孪生十问:分析与思考

本文来源&#xff1a;数字孪生DigitalTwin(北京航空航天大学&#xff0c;自动化科学与电气工程学院&#xff0c;数字孪生研究组)摘 要&#xff1a;当前数字孪生备受学术界、工业界、金融界以及政府部门关注。然而各界对数字孪生存在不同的理解和认识&#xff0c;对数字孪生相关…

c语言xc比较大小写,XCTestAPI文档.docx

XCTestAPI文档XCTest准备工作对于新项目&#xff0c;在新建项目界面勾选上UI Tests&#xff1b;对于旧项目&#xff0c;在项目界面点击菜单栏中的FileNewTarget…iOSTestiOS UITesting Bundle。sleepForTimeInterval:线程休眠[NSTread sleepForTimeInterval:1.0f];也可以使用sl…

C语言编写一个备份文件,2014年3月二级C语言上机题库备份.doc

全国计算机等级考试二级C语言上机题库第一套程序填空程序通过定义学生结构体数组&#xff0c;存储了若干个学生的学号、姓名和三门课的成绩。函数fun的功能是将存放学生数据的结构体数组&#xff0c;按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划…

图解机器学习

来源&#xff1a;大数据实验室机器学习这个主题已经很普遍了&#xff0c;每个人都在谈论它&#xff0c;但很少有人能够透彻地了解它。当前网络上的一些机器学习文章晦涩难懂&#xff0c;理论性太强&#xff0c;或者通篇云里雾里地介绍人工智能、数据科学的魔力以及未来的工作等…

BZOJ 4819: [Sdoi2017]新生舞会

二次联通门 : BZOJ 4819: [Sdoi2017]新生舞会 /*BZOJ 4819: [Sdoi2017]新生舞会二分 01分数规划 最小费用流二分出一个答案费用流检验*/ #include <cstdio> #include <iostream> #include <queue> #include <cstring>const int BUF 12312312; char …

c语言 复制文件并重命名文件,VS2010 重命名文件:源文件名和目标文件名相同 的解决方案...

想要在“”解决方案资源管理器“”中修改一个已经写好的文件的文件名&#xff0c;如图&#xff1a;在改了几次后就出现了如图的问题&#xff1a;然而在“解决方案资源管理器”中并没有看到&#xff0c;于是我打开了工程在磁盘中的位置文件夹&#xff1a;意外发现了真的存在了一…

Space X和NASA到底有什么关系?

来源&#xff1a;大柳树防务原计划北京时间5月28日发射的载人龙飞船由于天气原因推迟至北京时间5月31日发射。此次发射任务由Space X公司研发的猎鹰9号&#xff08;Falcon 9&#xff09;运载火箭搭载龙飞船&#xff08;Crew Dragon&#xff09;执行&#xff0c;目的是将两名NAS…