用 char*作为std::map中的key

网上的用法:

声明map时需要添加一个cmp比较函数,不然map在比较时,使用char *的指针进行比较,而不是比较char字符串。

[cpp] view plain copy
  1. #include <cstring>
  2. struct cmp_str
  3. {
  4. bool operator()(char const *a, char const *b)
  5. {
  6. return std::strcmp(a, b) < 0;
  7. }
  8. };
  9. int main ( int argc, char ** argv )
  10. {
  11. std::map<const char*, int, cmp_str> map;
  12. map["aa"]  = 1;
  13. map["ca"]  = 2;
  14. map["ea"]  = 3;
  15. map["ba"]  = 4;
  16. map["ba"]  = 5;
  17. map["bb"]  = 6;
  18. map["ba"]  = 7;
  19. std::map<const char*, int, cmp_str>::iterator it = map.begin();
  20. for (; it != map.end(); it++ )
  21. {
  22. std::cout << (*it).first << ": " << (*it).second << std::endl;
  23. }
  24. return 0;
  25. }

我用这个时报错了,不加cmp_str时,如果char*内容一样,地址不一样,就会认为key是不一样的,后来把key改为string了,这个问题没有了。

参考:

http://stackoverflow.com/questions/4157687/using-char-as-a-key-in-stdmap

std::map char*做key相关推荐

  1. c++ std::map value_type、key_type、mapped_type

    map<string, int>::key_type  v1; //此时key_type的v1类型是string map<string, int>::mapped_type  ...

  2. 如何使用基于范围的for()循环与std :: map?

    本文翻译自:How to use range-based for() loop with std::map? The common example for C++11 range-based for( ...

  3. CMap在用CString做key类型时,ARG_KEY要选LPCTSTR

    CMap在用CString做key类型时,ARG_KEY要选LPCTSTR  文章来源:http://blog.csdn.net/flyingxu/archive/2005/12/26/562852. ...

  4. 【c++】映射表std::map

    文章内容为网络搜集内容 std::map 映射表(Map)容器是一个按特定顺序存储以键值对组合而成的元素的关联容器 // <map> template < class Key,cla ...

  5. c++ map是有序还是无序的_C++ STL中Map的按Key排序和按Value排序

    map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义 ...

  6. std::map用法总结

    给出了map的基本用法如插入.查找.删除.遍历等等,同时告诉你如何实现双键map,包括 (1) 只有两个键都匹配才命中目标 (2) 两个键中任意一个匹配就命中目标 可以扩展到多键 (一) 介绍特点:1 ...

  7. 关于 std::set/std::map 的几个为什么

    2013-01-20 std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型).也就是说,其接口(不是 OO 意义下的 interfac ...

  8. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行 ...

  9. 关联式容器使用char*充当key或者value的时候

    比如说map,如果使用char*当作key,或者value的时候,可能因为char*,只是指针(地址)而发生意想不到的bug, 因为一旦对这个map对象赋值,他只存储指向某个变量的指针变量,而以前的那 ...

最新文章

  1. 全景图拼接算法实现与改进
  2. pytorch 获取模型参数_剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型...
  3. zabbix3.0.4 部署之一 (简介)
  4. Qt 操作words实例 --- 幼儿快算题生成器
  5. wxWidgets:wxEventBlocker类用法
  6. 宠物商店(pet-shop) 学习笔记
  7. mybatis.net - 5 嵌入资源与引用资源
  8. OSGI(面向Java的动态模型系统)
  9. HDOJ 2526 HDU 2526 浪漫手机 ACM 2526 IN HDU
  10. SQL中的模糊范围查询特殊符号应用
  11. 阿里云centos 6.9安装oracle10g
  12. 用 Ajax 和 RSS 攒个首页新闻——(上)
  13. 【HDU 6031]】 Innumerable Ancestors
  14. Json-getJSON
  15. linux挂载40t硬盘,Centos支持40T磁盘阵列MD1200
  16. A blockchain‑based smart home gateway architecture for preventing data forgery
  17. 短信服务器部署位置,搭建短信服务器
  18. QGIS二次开发:鼠标在地图上移动时,状态栏显示鼠标所在位置经纬度
  19. net—card seting monitor mood
  20. 个人精心整理的前端学习开发实用的网站

热门文章

  1. erdas图像增强步骤_基于erdas的图像增强处理
  2. html和css之间有什么区别,html语法和css语法之间有什么区别
  3. java ssh工具类_JAVA SSH2工具类
  4. nb-iot_如何使用语音通过Android控制IoT设备
  5. python制作验证码_Python编写生成验证码的脚本的教程
  6. axios请求接口http_axios调用接口
  7. java中capitals,Java GlobalConfiguration.isCapitalMode方法代码示例
  8. mysql文件怎么导入_mysql怎么导入sql文件
  9. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...
  10. Spring Boot 2.x基础教程:多文件的上传