最近开始整理资料,将以前网易博客发表的文章重新发布。
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索引的问题。