C++Primer11.2.1节练习

练习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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学C++.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值