关于map::insert的一点小问题。

neicole 2011-09-15 07:34:14
关于map::insert的一点小问题。


《C++ Primer》中文第四版书上P313描述:
m.insert(e)
e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。
该函数返回一个pair类型的对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。



问题:这里所说的是指返回是bool型吗?
如果返回的只是void型,如果有插入失败的情况怎么办?
在编程时,我写了一个程序(如下),然后,当我用if(//放进insert函数)时,程序出错,于是,想知道,是我的程序出问题了,还是这段文字我还没有理解透?




// 以下是程序的部分内容

bool user::inserthelp(string stemp, int itemp)
{
users.insert(type_map_si::value_type(stemp, itemp))
return true;
}


/**
当我用了下面的方法时,提示
1>user.cpp(20): error C2451: “std::pair<_Ty1,_Ty2>”类型的条件表达式是非法的
1> with
1> [
1> _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<std::string,int,std::less<std::string>,std::allocator<std::pair<const std::string,int>>,false>>>,
1> _Ty2=bool
1> ]


bool user::inserthelp(string stemp, int itemp)
{
if(users.insert(type_map_si::value_type(stemp, itemp)));
return true;
else
return false;
}
**/


#include <iostream>
#include <string>
#include <utility>
#include <map>
using std::string;

class user
{
private:
typedef std::map<string,int> type_map_si;
type_map_si users;

bool inserthelp(string, int);
};

...全文
222 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neicole 2011-09-16
  • 打赏
  • 举报
回复
噢,原来就这样啊!
忽然觉得自己问的问题太没水准。。。。。晕。。。
结帖,谢谢啦!
机智的呆呆 2011-09-15
  • 打赏
  • 举报
回复
pair是一个模板类,里面有两个成员,一个成员叫first 迭代器保存在first中。另一个叫second,bool是存在second中的
neicole 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 demon__hunter 的回复:]
C/C++ code

if(users.insert(type_map_si::value_type(stemp, itemp)).second)


insert返回值也是一个std::pair类型的。无法隐式转换成bool
[/Quote]

哦,这样啊。。。又好像看多几次看明白了一点。。。。

还有还有
“包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。”
它所包含的bool是放在哪?
机智的呆呆 2011-09-15
  • 打赏
  • 举报
回复

if(users.insert(type_map_si::value_type(stemp, itemp)).second)

insert返回值也是一个std::pair类型的。无法隐式转换成bool
neicole 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 demon__hunter 的回复:]
e是一个std::pair类型的对象
[/Quote]

嗯?但是提出来后又能用了?

bool user::inserthelp(string stemp, int itemp)
{
users.insert(type_map_si::value_type(stemp, itemp));
return true;
}


还是有点不明白。主要还是bool的问题想不明白。
机智的呆呆 2011-09-15
  • 打赏
  • 举报
回复
e是一个std::pair类型的对象

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧