最近迷上了泛型编程,在一个项目中需要用到一个变长映射,于是用map+vector+结构体实现了multimap的基本功能。
特改个demo存档。
//---------------------------------------------------------------------------
#include <map>
#include<vector>
#include <string>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
typedef struct test
{
char nn[8];
int xx;
int yy;
} Mystruct;
typedef vector< Mystruct> Myvctor;
typedef map<int,Myvctor> Mymap;
int main(int argc, char *argv[])
{
Mystruct st1[2]= {{"aa",12,34},{"bb",21,43}};
Mystruct st2[3]= {{"AA",11,22},{"BB",33,44},{"CC",55,66}};
Myvctor myvctor(st1,st1+2); //直接把数组初始化进来
Mymap mymap;
mymap.insert(pair<int,Myvctor>(1,myvctor));
myvctor.clear();
for(int i=0; i<sizeof(st2)/sizeof(st2[0]); i++)
myvctor.push_back(st2[i]);
mymap.insert(pair<int,Myvctor>(3,myvctor));
cout<<"******* 遍 历 *******" <<endl; //遍历
cout<<"ID :nn xx yy" <<endl;
cout<<"==================================" <<endl;
Mymap::iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
{
Myvctor::iterator it;
for(it = iter->second.begin(); it != iter->second.end(); it++)
{
cout<<iter->first <<" : "<< (*it).nn<<", "<<(*it).xx<<", "<<(*it).yy<<", "<<endl;
}
cout<<"==================================" <<endl;
}
cout<<"\n******* 查询= 3 *********" <<endl; //查询
iter= mymap.find(3);
if(iter != mymap.end())
{
Myvctor::iterator it;
for(it = iter->second.begin(); it != iter->second.end(); it++)
{
cout<<iter->first <<" : "<< (*it).nn<<", "<<(*it).xx<<", "<<(*it).yy<<", "<<endl;
}
cout<<"=====================" <<endl;
}
system("pause");
return 0;
}
//---------------------------------------------------------------------------