习题11.3-4:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
void word_count(const string &file_name, map<string, size_t> &smap, const set<string> &sset)
{
ifstream in_file(file_name);
string word;
while (in_file >> word)
{
for (auto &c : word)//调整为小写
c = tolower(c);
auto wc = std::find_if(word.begin(), word.end(), [](char &c){return ispunct(c); });//不适用与中文字符
word.erase(wc, word.end());
if (sset.find(word) == sset.end())
++smap[word];
}
in_file.clear();
for (const auto &m : smap)
cout << m.first << " occurs " << m.second << " times." << endl;
}
int main()
{
map<string, size_t> smap;
const set<string> sset{ "the", "but", "and", "or", "an", "a" };
word_count("有标点单词段落测试.txt", smap, sset);
getchar();
return 0;
}
习题11.7:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
using Family = map<string, vector<string>>;
void new_family(Family &familys)
{
cout << "Input family members,format(lastname child's name child's name...)" << endl;
string family_name, child_name;
cin >> family_name;
cin >> child_name;
vector<string> children{ child_name };
familys.insert(pair<string,vector<string>>(family_name, children));
while (cin >> child_name)
familys[family_name].push_back(child_name);
cin.clear();
}
void new_member(Family &familys)
{
cout << "Please input a new family member, lastname & child's name:" << endl;
string child_name, family_name;
cin >> family_name >> child_name;
familys[family_name].push_back(child_name);
}
void display_familys(Family &familys)
{
cout << "All familys are displaying:" << endl;
for (auto &f : familys)
{
cout << f.first << " ";
for (string &s : f.second)
cout << s << " ";
cout << endl;
}
}
int main()
{
Family familys;
new_family(familys);
new_family(familys);
new_member(familys);
display_familys(familys);
system(0);
getchar();
getchar();
getchar();
getchar();
return 0;
}
习题11.12-13:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
void read(vector<pair<string, int> > &vec)//为了兼容老版填了个空格
{
cout << "读入string 和 int的序列存入pair并保存在vector中:" << endl;
string s;
int i;
while (cin >> s >> i)
//vec.push_back(std::make_pair(s, i));
//vec.push_back({ s, i });
vec.push_back(pair<string, int>(s, i));
}
int main()
{
vector<pair<string, int> > vec;
read(vec);
for (auto p : vec)
cout << p.first << " " << p.second << endl;
getchar();
getchar();
return 0;
}
习题11.14:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
using Family = map<string, vector<pair<string, string>>>;
void new_family(Family &familys)
{
cout << "Input family members,format(lastname child's name & birthday & child's name...)" << endl;
string family_name, child_name, child_birth;
cin >> family_name >> child_name >> child_birth;
vector<pair<string, string>> ssvec{ { child_name, child_birth } };
familys.insert({ family_name, ssvec });
while (cin >> child_name >> child_birth)
familys[family_name].push_back({ child_name, child_birth });
cin.clear();
}
void new_member(Family &familys)
{
cout << "Please input a new family member, lastname & child's name:" << endl;
string family_name, child_name, child_birth;
cin >> family_name >> child_name >> child_birth;
familys[family_name].push_back({ child_name, child_birth });
}
void display_familys(Family &familys)
{
cout << "All familys are displaying:" << endl;
for (auto &f : familys)
{
cout << "姓:" << f.first << endl;
for (auto &p : f.second)
cout << "名: " << p.first << " 生日: " << p.second << endl;
}
}
int main()
{
Family familys;
new_family(familys);
new_member(familys);
display_familys(familys);
getchar();
getchar();
return 0;
}
习题11.20:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
void word_count(const string &file_name, map<string, size_t> &smap, const set<string> &sset)
{ //不适用与中文字符
ifstream in_file(file_name);
string word;
while (in_file >> word)
{
for (auto &c : word)//调整为小写
c = tolower(c); //下一行检查标点
word.erase(std::find_if(word.begin(), word.end(), [](char &c){return ispunct(c); }), word.end());
auto ret = smap.insert({ word, 1 });
if (!ret.second)
++ret.first->second;
}
in_file.clear();
for (const auto &m : smap)
cout << m.first << " occurs " << m.second << " times." << endl;
}
int main()
{
map<string, size_t> smap;
const set<string> sset{ "the", "but", "and", "or", "an", "a" };
word_count("有标点单词段落测试.txt", smap, sset);
getchar();
return 0;
}
习题11.23:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
int main()
{
std::multimap<string, string> children;
for (string lastName, childName; cin >> lastName >> childName; children.emplace(lastName, childName));
for (auto &c : children)
cout << c.first << " " << c.second << endl;
getchar();
getchar();
return 0;
}
习题11.31:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
int main()
{
std::multimap<string, string> authors{ { "Ge", "hhh" }, { "Ge", "aaa" }, { "Hu", "rrr" } };
auto author = "Ge";
auto iter = authors.find(author);
auto cnt = authors.count(author);
while (cnt)
{
iter = authors.erase(iter);//注意此处写法!不然就会重复删除不存在的元素了
--cnt;
}
for (auto &a : authors)
cout << a.first << " " << a.second << endl;
getchar();
getchar();
return 0;
}
习题11.32:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;
int main()
{
std::multimap<string, string> authors{ { "alan", "DMA" },
{ "pezy", "LeetCode" },
{ "alan", "CLRS" },
{ "wang", "FTP" },
{ "pezy", "CP5" },
{ "wang", "CPP-Concurrency" } };
std::map<string, std::multiset<string>> order_authors;
for (auto &a : authors)
order_authors[a.first].insert(a.second);
for (auto &a : order_authors)
{
cout << a.first << ":" << endl;
for (auto &work : a.second)
cout << work << endl;
}
getchar();
getchar();
return 0;
}