暑假c++复习11
// 定义一个vector容器,存储在未来6个月里要阅读的书的名字,
// 定义一个set,用于记录已经看过的书名。
// 本程序支持从vector中选择一本没有读过而现在要读的书,
// 并将该书名放入记录已读书目的set中,
// 并且支持从已读书目的set中删除该书的记录。
// 在虚拟的6个月后,输出已读书目和还没有读的书目
#include <iostream>#include <map>#include <string>using namespace std;int main(){multimap<string, string> authors;string author, work, searchItem;// 建立作者及其作品的multimap容器do {cout << "Enter author name(Ctrl+Z to end):" << endl;cin >> author;if (!cin)break;cout << "Enter author's works(Ctrl+Z to end):" << endl;while (cin >> work)authors.insert(make_pair(author, work));cin.clear();// 读入了一位作者的所有作品后使流对象重新有效}while (cin);cin.clear(); // 使流对象重新有效// 读入要找的作者cout << "Who is the author that you want erase:" << endl;cin >> searchItem;// 找到该作者对应的第一个元素multimap<string,string>::iterator iter =authors.find(searchItem);if (iter != authors.end())// 删除该作者的所有作品authors.erase(searchItem);elsecout << "Can not find this author!" << endl;// 输出multimap对象cout << "author\t\twork:" << endl;for (iter = authors.begin(); iter != authors.end(); ++iter)cout << iter->first << "\t\t" << iter->second << endl;return 0;}
对find函数所返回的迭代器进行判断,当该迭代器指向authors中的有效元素时才进行erase操
作,从而保证当所寻找的元素不存在时,程序依然能正确执行。