练习11.9:定义一个map,将单词与一个行号的list关联,list中保存的是单词所出现的行号。
/*
*C++Primer(第五版)
*11.2.2节练习
*练习11.9
*问题描述:练习11.9:定义一个map,将单词与一个行号的list关联,list中保存的是单词所出现的行号。
* 注意:第二层的while循环,由于是list<int>类型,设置9999作为这层的结束标志
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*/
#include <iostream>
#include <map>
#include <list>
#include <string>
using namespace std;
int main()
{
map<string,list<int>> word_container;
string word;
int number;
while(cin >> word)
{
//数字输完之后,以 9999 作为标志结束这一层的while循环,不加 number != word,当输入下一个word时,由于输入流认为输入了不同的类型,因此结束了两层的while循环,结果只能显示第一行的
while(cin >> number && number != 9999)
{
word_container[word].push_back(number);
}
}
//打印单词和行号
for(auto &w : word_container)
{
cout << w.first << " ";
for(auto it = w.second.begin(); it != w.second.end();++it)
{
cout << *it << " ";
}
cout << endl;
}
return 0;
}