某公司招聘的面试环节, 有这样一个题目:结构体作为STL map的key时需要注意什么? 对于懂STL map的同学来说, 这个题目还是比较easy的, 先看程序:

#include <iostream>
#include <string>
#include <map>
using namespace std;struct Info
{string name;int score;
};int main()
{Info a, b;a.name = "eric";a.score = 90;b.name = "cat";b.score = 85;map<Info, int> m;m[a] = 1;m[b] = 2;return 0;
}

运行一下, 发现程序是有错误的。 为什么呢? 原来, 对于map来说, key必须是有序的, 也就是说, key与key之间必须能比较, 所以需要重载<号, 因此, 上述程序错误, 应该改为:

#include <iostream>
#include <string>
#include <map>
using namespace std;struct Info
{string name;int score;bool operator< (const Info &x) const{return score < x.score;}
};int main()
{Info a, b;a.name = "eric";a.score = 90;b.name = "cat";b.score = 85;map<Info, int> m;m[a] = 1;m[b] = 2;map<Info, int>::iterator it;for(it = m.begin(); it != m.end(); it++){cout << it->first.name << endl;}return 0;
}

运行正确, 结果为:
cat
eric

OK, 本文先讨论到这里, 关键是要对map的“关键字有序”有足够的认识。

结构体作为STL map的key时需要注意什么? (某公司招聘面试试题)已跪~~~~(_)~~~~相关推荐

  1. struct作为map的key时,需要重载该结构体

    当结构体作为map中的key时,这个结构体必须重载"<"运算符,  否则将出错,看我完整代码: #ifndef WIN32 #include <string.h> ...

  2. C++对类(或者结构体)中字符数组赋值时,出现表达式必须是可修改的左值的问题

    最近自己遇到了这类问题,在csdn上找到了很多大神给的解答,非常到位 特别感谢这位: https://blog.csdn.net/JQ_AK47/article/details/53169799 问题 ...

  3. C/Cpp / STL / map 的 key 为自定义的 struct 或者 class 时,有什么注意事项?

    答案:需要重载 struct 或者 class 的 operator < . 原因: 因为 map 的底层是 RBTree,而 RBTree 的比较函数为如下图所示: 而该 Compare 来自 ...

  4. 使cson结构体中数组长度为空时,转换成Json字符串时输出空数组

    cson.c 文件 getJsonArray() 函数中 if (pSrc == NULL)  return ERR_MISSING_FIELD; 改为: if (pSrc == NULL) { cs ...

  5. map和vector的迭代器失效问题(某公司招聘笔试试题)

    当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕. 某次笔试, 我遇到这样一个题目: 删除map<int, int>中val ...

  6. 技巧:Go 结构体如何转换成 map[string]interface{}

    本文介绍了Go语言中将结构体转成map[string]interface{}时你需要了解的"坑",也有你需要知道的若干方法. 我们在Go语言中通常使用结构体来保存我们的数据,例如要 ...

  7. golang常用库之mapstructure包 | 多json格式情况解析、GO json 如何转化为 map 和 struct、Go语言结构体标签(Struct Tag)

    文章目录 golang常用库之mitchellh/mapstructure包 | go将map转换为struct 一.msgpack 二.背景 三.多json格式情况解析使用思路 四.mapstruc ...

  8. Go基础:指针、Map、结构体

    目录 Map 按照指定顺序遍历map 元素为map类型的切片 值为切片类型的map 结构体 类型定义和类型别名的区别 struct 取结构体的地址 结构体没有构造函数,可自己实现 结构体初始化 方式一 ...

  9. map可以用结构体作为健值吗?

    map可以用结构体作为健值吗 前言 map可以用结构体作为健值 前言 在使用map时,有时候我们需要自定义键值,才能符合程序的需要. 比如我们需要使用自定义的结构体来作为map的键值: struct ...

最新文章

  1. unity中app实现拖拽_10分钟让你实现在APP中对网络状态变化进行全局提示
  2. Codeforces Round #352 (Div. 2) A. Summer Camp 水题
  3. 操作系统原理第八章:内存管理
  4. 007-SDK框架之LYWSDKInterfaceProtocol.cpp
  5. 使用 AjaxManager 生成调用服务器端方法的 javascript 函数
  6. python测量血压_python距离测量的方法
  7. mysql 从备份_MySQL主从备份配置
  8. 信贷系统学习总结(3)——现金贷之产品架构和信审系统
  9. 数据库点滴积累——索引
  10. 初次安装Linux(Ubuntu)(ssh,ftp服务安装)
  11. MAC 上的 Live Writer : ecto
  12. html+css基础-1-屏幕居中、双飞翼布局、清除浮动
  13. 计算机组成与原理第三章答,计算机组成与原理第三章答案.doc
  14. 如何快速获得城市道路智慧照明服务认证
  15. 2022常见软件测试面试题
  16. Java学习day07-Java高级编程-多线程
  17. wireshark抓rtsp rtp rtcp包手把手教你分析包结构 H264 H265
  18. 【二】分布式训练---参数服务器训练(飞桨paddle1.8)
  19. 算法动态规划之杂交水果取名问题
  20. setInterval使用过程中报Uncaught SyntaxError: Unexpected identifier

热门文章

  1. 网络编程学习笔记(poll函数)
  2. JDK源码分析(7)之 Reference 框架概览
  3. 20172305 2017-2018-2 《程序设计与数据结构》实验三报告
  4. UML从需求到实现---类图(2)
  5. win7启动后报丢失nscmk.dll解决解决方式
  6. 关于ThinkPHP的一些编程技巧
  7. C++ 虚析构函数
  8. XPS reader for Silverlight
  9. java线程挂起唤醒_JAVA并发(10)—interrupt唤醒挂起线程
  10. android2.2