C++中如何如果定义一个关联容器map< int,vector<类> > 如何用make_pair()给该容器插入元素

例如ID_Card是一个类,vector<ID_Card>容器中已经存放了3个ID_Card的对象现在我新建一个map<int,vector<ID_Card>>容器,为什... 例如ID_Card是一个类,vector<ID_Card>容器中已经存放了3个ID_Card的对象
现在我新建一个map< int,vector<ID_Card> >容器,为什么无法用insert(make_pair())给该map容器赋值?
为了方便各位调试,我把代码写下来:
//这是类ID_Card的声明
class ID_Card
{
public:
ID_Card();
ID_Card(int n,string m);
void print();
private:
int num;
string name;
};
ID_Card::ID_Card()
{
num=0;
name="Default";
}
ID_Card::ID_Card(int n,string m):num(n),name(m){}
void ID_Card::print()
{
cout <<num<<"\t";
cout <<name<<endl;
}

//构造一个vector容器并储存三个ID_Card对象
vector<ID_Card> data;
vector<ID_Card>::size_type size=3;
for(int i=0;i!=size;++i)
{
ID_Card* temp=new ID_Card(1,"TEST");
data.push_back(*temp);
delete temp;
}
vector<ID_Card>::iterator iter;
for(iter=data.begin();iter!=data.end();++iter)
{
iter->print();
}

//然后再新建一个map容器,问题来了:
map< int,vector<ID_Card> > data_m;
map< int,vector<ID_Card> >::size_type size_m=3;
for(int i=0;i!=size_m;++i)
{
vector<ID_Card> d;
data_m.insert(make_pair(i,data.at(i)));
//这一句总是编译不通过,查了很多资料也无济于事,百思不得其解啊!!!
}
麻烦各位有经验的大虾帮忙看看到底是什么问题
用一个int型的i和一个ID_Card类型的data.at(i)不是正好对应map< int,vector<ID_Card> >容器的键和值的类型吗?为什么不能通过编译呢
已经把完整代码贴出来了,各位直接拷贝到自己机子上就可以直接运行的,thanks for you help !!!
展开
 我来答
wanglixin1001
2012-09-28 · TA获得超过4173个赞
知道大有可为答主
回答量:1758
采纳率:80%
帮助的人:850万
展开全部
这位同学您好!
你声明的map是map< int,vector<ID_Card> > data_m,而插入的对象则是一个(int, ID_Card),并不是(int, vector<ID_Card>),所以出现错误。
可以修改map的声明为map<int, ID_Card> data_m;
应该就可以了。
希望能够帮到你。
追问
那如果我不修改map的声明,也就是还是map >
那么make_pair()的实参该如何写?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江流尹au
2012-09-28 · TA获得超过139个赞
知道答主
回答量:456
采纳率:50%
帮助的人:164万
展开全部
你这个类型不匹配啊,mao容器你插入的是vector<ID_Card>中的一个元素,那类型就是ID_Card,怎么能匹配map的类型vector<ID_Card>呢?
更多追问追答
追问
恩,那如果我不修改map的声明,也就是还是map >
那么make_pair()的实参该如何写?
追答
你不改map的声明,那你只能插入一个vector类型的容器,你现在插入的是一个ID_Card类型的变量。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beddy1
2012-09-28 · TA获得超过1988个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2182万
展开全部
不知道你到底要把什么放map中,很明显语法上应该是 data_m.insert(make_pair(i, data));这才对。

或者map<int, ID_Card> data_m2, 然后 data_m2.insert(make_pair(i, data[i]));
追问
就是要把一个int型(作为键)和一个容器vector(作为值)一起放到map里面啊
所以map的声明就是这样map >没问题吧
可你这个make_pair(i,data)里面的data具体是指哪个一元素?data[1]还是data[2]?
我的意图是:
建一个vector,里面放了3个ID_Card对象
再建一个map >,把上面的vector和一个int型变量一起放到map里面
那么如何为这个map容器插入元素?
追答
你要明白,你的data才是 vector, data[1] 只是int。
所以,data_m.insert(make_pair(i, data)) 就是你想要的结果!!!!!!
你都说了你要放到map里的是vector,那何来的指哪个元素一说?放进去的就是整个vector
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式