练习11.5:
map:map中是关键字-值对的集合,关键字起到索引的作用,值表示与索引相关联的数据
set:set中是关键字的的集合,每个元素都只包含一个关键字
看情况决定,如果要存入对应关系则使用map,只存入关键字则使用set
练习11.6:
set:是关键字的集合,set中的元素是不重复的,双向迭代器
list:与set类似,但list的元素可以重复,双向迭代器
看情况决定,如果要快速查找某个关键字,用set
练习11.7:
#include <iostream>
using namespace std;
#include <map>
#include <string>
#include <set>
#include <vector>
//添加新的家庭及成员
void addNewFamily(map<string, vector<string>>& mf, const string& s, const vector<string>& vname)
{
//新的家庭是否已有
if (mf.find(s) == mf.end())
{
mf[s] = vname;
}
else
{
cout << "\"" << s << "\"" << "家已经存在" << endl;
//将Vector中的名插入到家庭里
for (const auto& c : vname)
{
mf[s].push_back(c);
}
}
}
//向已有家庭添加新成员
void addNewMember(map<string, vector<string>>& mf, const string& sf, const string& mname)
{
//将名插入到vector中
mf[sf].push_back(mname);
}
//打印家族
void printFamily(map<string, vector<string>>& mf)
{
for (const auto& family : mf)
{
cout << family.first << " 家的成员:";
for (const auto& member : family.second)
{
cout << " \"" << member << "\"" << ",";
}
cout << endl;
}
}
int main()
{
vector<string>vn = { "lihai","wangling","dickfuck","liBob","TYchathy","PyDaive" };
map<string, vector<string>>mFamily = {
{"li", { "lucy","jack","fuck" }},
{"bao",{"Bob","chathy","Daive"}}
};
//打印未插入家庭以及成员前:
printFamily(mFamily);
cout << "------------------------------------------" << endl;
string first_name = "wang";
//插入新的家庭:
addNewFamily(mFamily, first_name, vn);
//打印:
printFamily(mFamily);
cout << "------------------------------------------" << endl;
//插入新的孩子
addNewMember(mFamily, "li", "xiaoxiao");
//打印
printFamily(mFamily);
system("pause");
return 0;
}
练习11.8:vector需要删除那些重复的单词,比较复杂,而set不会存入重复的单词
#include <iostream>
using namespace std;
#include <map>
#include <string>
#include <set>
#include <vector>
#include <algorithm>
int main()
{
vector<string>vword = { "hello","world","world","you","are","lucky","good","happy","man","hello","you" };
for (const auto& c : vword)
{
cout << c << " ";
}
cout << endl;
sort(vword.begin(), vword.end());
auto it = unique(vword.begin(), vword.end());
vword.erase(it, vword.end());
//删除重复元素
cout << "删除重复元素: " << endl;
for (const auto& c : vword)
{
cout << c << " ";
}
cout << endl;
system("pause");
return 0;
}