STL map 的 key 元素
在做 compiler 语义分析时, 需要用到 map<?,?>
在别人的代码上做扩展, 所以有些代码是不能动的
这时, 需要一个 map<symbol,int> 的数据结构, 但是我并不清楚 symbol 是否重载了 <
我特地试了一下, 没有重载 '<' 的新类, 使用 map 是要报错的
改用 map<symbol*,int>, 成功了
#include <iostream>
#include <map>
using namespace std; class unknow {
private:
int index;
public:
int get_index() {
return index;
}
void increment() {
index++;
}
/*
bool operator<(const unknow &other) const {
return this->index < other.index;
}
*/
}; int main() {
map<unknow*, int> mapping;
unknow *u1 = new unknow();
unknow *u2 = new unknow();
unknow *u3 = new unknow();
mapping[u1] = 1;
mapping[u2] = 2;
mapping[u3] = 3;
cout << u1 << endl;
cout << u2 << endl;
cout << u3 << endl; return 0;
}
上面的代码, 使用 map<unknow,int> 会报错的
我想, 使用指针的话, 排序应该是按照地址来的, 不过想不出什么办法去验证
另外, 有一个问题困扰我很久了, 就是一一对应的数据结构的实现, 以前在做 coursera 算法作业时就需要一一对应, 当初专门去论坛问了下, 得知只能用 map<A,B>, map<B,A>, 这种实现实在太过粗糙, 弊端很多
STL map 的 key 元素的更多相关文章
- STL map 按key值和按value值排序
map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定 ...
- (转载)STL map与Boost unordered_map的比较
原链接:传送门 今天看到 boost::unordered_map,它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合 ...
- C++ STL map容器值为指针时怎么释放内存
最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSo ...
- 关于C++ STL标准库中map 的多元素应用
map的特性是,所有的元素会根据键值自动排序.map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一个元素被视为键值,第二个被视为实质piar 的定义 templat ...
- Map四种获取key和value值的方法,以及对map中的元素排序(转)
获取map的值主要有四种方法,这四种方法又分为两类,一类是调用map.keySet()方法来获取key和value的值,另一类则是通过map.entrySet()方法来取值,两者的区别在于,前者主要是 ...
- java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合
//定义一个100元素的集合,包含A-Z List<String> list = new LinkedList<>(); for (int i =0;i<100;i++) ...
- POJ 3096 Surprising Strings(STL map string set vector)
题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...
- 对Map按key和value分别排序
一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红 ...
- STL MAP 反序迭代
ITS_NOTICE_MAP::reverse_iterator it = noticeMap.rbegin(); for ( ; it != noticeMap.rend(); ++it ) { I ...
随机推荐
- 流媒体协议RTMP,RTSP与HLS有什么不同
转载自:http://www.cuplayer.com/player/PlayerCode/Wowza/2015/0204/1774.html HLS (HTTP Live Streaming) Ap ...
- Linux防火墙的关闭和开启(转)
1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...
- python --对象的属性
转自:http://www.cnblogs.com/vamei/archive/2012/12/11/2772448.html Python一切皆对象(object),每个对象都可能有多个属性(att ...
- jenkins二
破解管理员密码 1.假如我们忘记了Jenkins管理员密码了该怎么办呢?Jenkins没有用到数据库,所有的文件都是保存到xml文件里的 2.第一步找到admin所在的目录 [root@centos- ...
- Python操作redis系列以 哈希(Hash)命令详解(四)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...
- EasyUI combobox的panelHeight自动高度
在使用EasyUI的时候,有时会用到combobox组件,这里的记录数不是很固定,设置为auto可能会被挡住,设置固定高度时,option很少时,也很丑 所以这里给出我自己自动调整combobox的p ...
- vim列编辑模式快捷键
vi/vim编辑器 多行行首插入 1 在多行行首插入,在nomal模式下按下ctrl+v,然后进行选择(如果想要选择至文件结尾,则再按G) 2 选择好以后按大写的I,则光标会自动跳转到所选择行的第 ...
- hdoj 1026 Ignatius and the Princess I 最小步数,并且保存路径
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- Eclipse上Hadoop插件中Run On Hadoop原理[转]
通过Eclipse的hadoop插件中的"run on hadoop"命令的原理:它不是把jar包发送到hadoop集群上去运行,而只是使用了hadoop集群上的hdfs,从hdf ...
- Redis 面试题(持续更新)
前言 看了一圈,发现Redis的面试题主要问的是如下几块: 原理 用处(缓存/队列 包括Pub.Sub/计数器/排行榜等) 基本操作与数据类型 消息队列 且与其它消息队列的区别 主从备份 宕机如何处理 ...