网易博客旧文--STL中如何在map中使用结构体作为索引

最近开始整理资料,将以前网易博客发表的文章重新发布。

2012-06-15 11:01:27| 分类: STL | 标签: |举报 |字号大中小 订阅

STL的map很好用,一般是用基本类型,例如int等作为map的索引,索引的可以是基本类型,也可以是结构。但现在有个特殊要求,想将结构体作为索引,应该怎么办呢,下面写了一段测试代码来展示怎么使用。

头文件中定义一个结构:

typedef struct TESTSTRUCT
{
int i;
int j;
bool operator<(const TESTSTRUCT &rhs) const
{
return ( this->i< rhs.i);
}
}TESTSTRUCT;

具体使用:

map<TESTSTRUCT,int> mapTest;

TESTSTRUCT mapindex;
mapindex.i = 1;
mapindex.j = 2;
typedef pair<TESTSTRUCT,int> STPAR;
mapTest.insert(STPAR(mapindex,6));
mapindex.i = 4;
mapTest.insert(STPAR(mapindex,7));
for (map<TESTSTRUCT,int>::iterator itr = mapTest.begin();itr!=mapTest.end();++itr)
{
TRACE3(“%d,%d,%d\r\n”,itr->first.i,itr->first.j,itr->second);
}

这里的关键其实就是定义结构时需要重载<,因为map在插入数据时是自动排序的,在没有指定排序方法时,使用<来进行排序,因为定义的TESTSTRUCT比大小的功能,因此重载<就可以使之比大小,这里用的是其中的元素i。

在具体的使用中,索引的值也可以是结构。若需要使用其他的排序方法,一个是重载其他几个操作符,另外一个就是自己写一个算法,加入到map的定义中,这里只是简单的使用,但已经解决了结构作为map索引的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值