九度oj--题目1204:农夫、羊、菜和狼的故事(map 用结构体作key)
2015-08-27 22:35
393 查看
使用结构体作为map的key时,一定要重载那个结构体的<运算符,否则报错(map根据重载的<符号来区分各个key,因此,重载<时一定要保证标识结构体的属性集合一定要全部重载到<中)
例子:
typedef struct ma
{
public:
nod left;
nod right;
int now;
bool operator < (const ma &other) const
{
if ((now<other.now)
||(now==other.now&&left.status[0]<other.left.status[0])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]<other.left.status[1])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]==other.left.status[1]&&left.status[2]<other.left.status[2])
)
{
return true;
}
return false;
}
};
注意:如果重载<时不把status[0,1,2]重载进去,那么map只根据重载中的now来区分key。会导致本来不一样的key变成一样的,出现bug。
例子:
typedef struct ma
{
public:
nod left;
nod right;
int now;
bool operator < (const ma &other) const
{
if ((now<other.now)
||(now==other.now&&left.status[0]<other.left.status[0])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]<other.left.status[1])
||(now==other.now&&left.status[0]==other.left.status[0]&&left.status[1]==other.left.status[1]&&left.status[2]<other.left.status[2])
)
{
return true;
}
return false;
}
};
注意:如果重载<时不把status[0,1,2]重载进去,那么map只根据重载中的now来区分key。会导致本来不一样的key变成一样的,出现bug。
相关文章推荐
- NYOJ 171 聪明的kk
- 浅析性能测试培训总结-IP欺骗
- ural 1008 Image Encoding
- 按键的轮询
- 面试题:找出数组中只出现一次的数字
- 遍历迷宫
- Scala学习第八天 Scala主构造器、私有构造器、构造器重载实战详解
- getResource于getResourceAsStream的使用
- 浅析系统性能调优
- 什么会在main函数之前执行
- 使用栈模拟递归的算法
- 面试常见知识点
- 页面瀑布流布局的实现 javascript+css
- mysql查询表中的所有字段
- 个人关于委托事件的一些浅显认识
- linux系统maclloc大内存的方法(超过物理内存的大小)
- SQL 触发器
- Visual C#2010学习笔记十之类的创建和调用
- 游标
- uva uva 1328 - Period ---KMP算法