find 的用法

acdbxzyw 2009-03-22 08:41:42
这个 这个。。。
stl find 的用法有点忘了
map<string,int>::iterator it = m.find(read);
//map<string,int>::iterator it = find(m.begin(),m.end(),read);

第二句是错的
不知道错哪儿了
前辈告诉一声啊 呵呵
...全文
308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
acdbxzyw 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liqinghua1653 的回复:]
引用 3 楼 joanlynnlove 的回复:
楼上
不好意思 还是看不太懂。。。
我那个第一个是返回的迭代器 第二个咋就不行了?
你说的这个模板也是返回的迭代器吧
搞不通呀

map的的iterator是std::pair <T1,T2>类型的指针. 在std::find函数中是通过*iterator和value比较, 想想看std::pair <T1,T2>类型的东西怎么能和T1类型比较啊.

while(first != last && *first != value) ++first;
*first != value里面的*first是s…
[/Quote]

我明白你的意思,但是在第一种方法里可以直接用 T1 类型的,第二种不能,能告诉我怎么用第二种方法吗
因为不知道map m 里面有没有以 string read 为关键字的 项,所以不好写这个pair 类型
如果写成 find (m.begin(),m.end(),make_pair(read,m[read]));
则明显是错误的 不仅写法可能有问题,而且如果原来没有m[read]项,则在查询时就会创建m[read]项
到底有没有针对 map 的第二种用法呢?如果有,怎么写,还请前辈赐教!
谢谢!O(∩_∩)O
liqinghua1653 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 joanlynnlove 的回复:]
楼上
不好意思 还是看不太懂。。。
我那个第一个是返回的迭代器 第二个咋就不行了?
你说的这个模板也是返回的迭代器吧
搞不通呀[/Quote]

map的的iterator是std::pair<T1,T2>类型的指针. 在std::find函数中是通过*iterator和value比较, 想想看std::pair<T1,T2>类型的东西怎么能和T1类型比较啊.

while(first != last && *first != value) ++first;
*first != value里面的*first是std::pair<T1,T2>类型, value是T1类型. 怎么比啊. 所以肯定有错误的
freeskyo 2009-03-23
  • 打赏
  • 举报
回复
m 哪里定义的?
尽量用成员函数find去find的。
acdbxzyw 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liqinghua1653 的回复:]
引用楼主 joanlynnlove 的帖子:
这个 这个。。。
stl find 的用法有点忘了
map <string,int>::iterator it = m.find(read);
//map <string,int>::iterator it = find(m.begin(),m.end(),read);

第二句是错的
不知道错哪儿了
前辈告诉一声啊 呵呵

补充一下
template <class InputIterator, class T>
InputIterator find <InputIterator first, InputIterator last, const T& value)
{
while(fi…
[/Quote]

楼上
不好意思 还是看不太懂。。。
我那个第一个是返回的迭代器 第二个咋就不行了?
你说的这个模板也是返回的迭代器吧
搞不通呀
liqinghua1653 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 joanlynnlove 的帖子:]
这个 这个。。。
stl find 的用法有点忘了
map <string,int>::iterator it = m.find(read);
//map <string,int>::iterator it = find(m.begin(),m.end(),read);

第二句是错的
不知道错哪儿了
前辈告诉一声啊 呵呵
[/Quote]
补充一下
template <class InputIterator, class T>
InputIterator find<InputIterator first, InputIterator last, const T& value)
{
while(first != last && *first != value) ++first;
return first;
}
看看代码, 相信你就明白了*first != value编译不过的*first是一个std::pair<T1,T2>类型, value是T1类型。
liqinghua1653 2009-03-22
  • 打赏
  • 举报
回复
map的find是把数据和它里面iteraor的first比较

find是比较直接比较iterator, 这里iterator是一个std::pair<int,int>类型.

65,211

社区成员

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

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