转载:std::map自定义key方法
来源:互联网 发布:js createelement img 编辑:程序博客网 时间:2024/06/05 01:08
转载地址:http://blog.sina.com.cn/s/blog_48d4cf2d0100mx4t.html
有时候我们想把用户自定义类型作为std::map的键值。
方法一)最简单的方法就是实现该自定义类型的<操作符,代码如下:
class Foo
{
public:
};
之后就可以使用Foo作为map的key了:
map<Foo, int> dict; // 该句等同于map<Foo, int, std::less<Foo> > dict;
dict[Foo(1)] = 1;
不过有时候,这招不好使,比如对下面的Foo2:
typedef std::pair<Foo, int> Foo2;
方法二)定义一个比较操作符,使用它作为map的模板参数,代码如下:
class Foo2Comparator
{
public:
};
这时候可以使用Foo2作为map的key了:
map<Foo2, int, Foo2Comparator> dict2;
dict2[Foo2(Foo(1), 100)] = 1;
方法三)为用户自定义类型特化std::less,代码如下:
namespace std
{
template <>
struct less<Foo2>
{
};
}
使用这种方法,声明map时无需指定比较函数对象,因为默认的比较对象就是std::less<T>,
map<Foo2, int> dict2;
dict2[Foo2(Foo(1), 100)] = 3;
======================================================
三种方法里面我最喜欢第二种,虽然使用起来略微复杂(多了一个模板参数),但最为明确清晰。
另外如果使用std::pair<T1, T2>作为map的key,若T1、T2是原始类型,那么使用默认的std::less<std::pair<T1, T2> >一般就ok了,没啥必要去自己折腾。
typedef std::pair<double, int> Pos;
std::map<Pos, int> dict3;
dict3[Pos(1.1, 10)] = 100;
- 转载:std::map自定义key方法
- 使用用户自定义类型作为std::map的key
- std::map key=std::pair
- Mapreduce中map方法自定义key类
- 用仿函数实现以std::string作为key的map自定义排序
- [C/C++标准库]_[初级]_[自定义std::map的key]
- std::map 自定义类做为key时 find operator< 的正确写法
- std::map多个key值
- 用 char*作为std::map中的key
- std::map的[]方法重写
- map key值自定义排序
- std::map find 自定义类型元素
- std::map对模板参数key的要求
- 判断 std 中的 map 中是否有 key
- c++中std::map key使用智能指针笔记
- google map key 申请方法
- Map四种获取key和value值的方法,以及对map中的元素排序(转载)
- std::map 中调用 std::copy 的方法
- Java中常用的加密方法(JDK)
- js实现List
- jQuery右键菜单
- UIMenuController控件的使用
- 经典SQL语句大全
- 转载:std::map自定义key方法
- 关于JAVA在linux启动时的环境变量设置
- Grid Control的启动及关闭步骤
- Camera服务之--架构浅析
- Linux下RPM软件包的安装及卸载
- Android Matrix
- 安装 JacORB 3.2
- BCD封装
- "The Moment" - Audi App Jam (The day before the D day)