求助:STL的小问题,map,单词中的字符的替换。

neicole 2011-08-16 08:43:52
大家,在书上看见这段代码时,表示疑惑,平常比较少用STL的内容,所以在这里想请各位帮帮忙解决这些小问题。


// 图468 ,给定一个map,其键为单词,值为指向只有一个字符不同的单词组的vector.
// 输出具有minwords或更多个通过一个字符替换就可以得到其他单词的那些单词。

void printHighChangeables(const map<string, vector<string> > & adjWords, int minWords = 15)
{
map<string, vector<string> > :: const_iterator itr;

for (itr = adjWords.begin(); itr != adjWords.end(); ++itr)
{
const pair<string, vector<string> > & entry = *itr;
const vector <string> & words = entry.second;

if( words.size() > = minWords)
{
cout << entry.first << " (" << words.size() << ") : ";
for ( int i = 0; i < words.size(); i++)
cout << " " << words[i];
cout << endl;
}
}
}

// 对书本上的例题的几点疑问:
// 1. const_iterator不是意味着itr是const 型吗?为什么还可以++itr?这样的话itr的值不是会变了么?
// 2. 第11行,entry.second是指第二个字母么?entry.first第一个字母?vector中没试过这种用法。
// 3. 最不懂的是,看不出究竟是哪里实现了字符替换的功能,得到了另一个单词,达到原题目的?
// 那个if语句不是只是大小的比较,然后输出的吗?是在这里实现了那个功能么?



...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
neicole 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]

const_iterator 只是说它指向的那个值不可以更改
entry.second不是第二个单词,是一个vector
[/Quote]

谢谢!明白了。

[Quote=引用 2 楼 zmshy2128 的回复:]

1. const_iterator意味*itr是const,并非限制itr自身。类似于const T*,而不是 T* const。
2、entry.second 指的 itr->second,也就是map元素中的第二部分vector<string>,同理entry.first指map元素中的第一部分string。

3、这个函数没有实现字符替换,只是依次检查map中的每个元素,如果元素的第……
[/Quote]

谢谢,基本上明白啦!
那个语句也是抄书的,嘿嘿,的确是第一次见。

[Quote=引用 3 楼 luciferisnotsatan 的回复:]

1,和const char *p,不能*p = 'a',但可以p++
2,first指map的key,second指map的value
3,这东西有替换(赋值)吗?只看到cout输出呀??
[/Quote]

谢谢,第一个问题第二个问题都明白啦!
噢~原来没有赋值啊,可能是书里面翻译得有点错吧。
luciferisnotsatan 2011-08-16
  • 打赏
  • 举报
回复
1,和const char *p,不能*p = 'a',但可以p++
2,first指map的key,second指map的value
3,这东西有替换(赋值)吗?只看到cout输出呀??
zmshy2128 2011-08-16
  • 打赏
  • 举报
回复
1. const_iterator意味*itr是const,并非限制itr自身。类似于const T*,而不是 T* const。
2、entry.second 指的 itr->second,也就是map元素中的第二部分vector<string>,同理entry.first指map元素中的第一部分string。

3、这个函数没有实现字符替换,只是依次检查map中的每个元素,如果元素的第二部分vector<string>的个数不小于minWords ,就打印出该元素的信息。


另:const pair<string, vector<string> > & entry = *itr;该语句的用法总觉得有点奇怪,我从来没这么用过。
maoxing63570 2011-08-16
  • 打赏
  • 举报
回复
const_iterator 只是说它指向的那个值不可以更改
entry.second不是第二个单词,是一个vector

64,654

社区成员

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

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