您现在的位置是:主页 > news > 西安美食/百度自动优化

西安美食/百度自动优化

admin2025/6/2 2:01:45news

简介西安美食,百度自动优化,小程序科技有限公司,天天seo伪原创工具文章目录练习11.21练习11.22练习11.23练习11.24练习11.25练习11.26练习11.27练习11.28练习11.29练习11.30练习11.21 假定word_count 是一个 string 到 size_t 的map,word 是一个string,解释下面循环的作用: while (cin >> word)word_co…

西安美食,百度自动优化,小程序科技有限公司,天天seo伪原创工具文章目录练习11.21练习11.22练习11.23练习11.24练习11.25练习11.26练习11.27练习11.28练习11.29练习11.30练习11.21 假定word_count 是一个 string 到 size_t 的map,word 是一个string,解释下面循环的作用: while (cin >> word)word_co…

文章目录

      • 练习11.21
      • 练习11.22
      • 练习11.23
      • 练习11.24
      • 练习11.25
      • 练习11.26
      • 练习11.27
      • 练习11.28
      • 练习11.29
      • 练习11.30

练习11.21

假定word_count 是一个 string 到 size_t 的map,word 是一个string,解释下面循环的作用:

while (cin >> word)++word_count.insert({word, 0}).first->second;

这条语句等价于:

while (cin >> word)
{auto result = word_count.insert({word, 0});++(result.first->second);
}

若insert成功:先添加一个元素,然后返回一个 pair,pair 的 first 元素是一个迭代器。这个迭代器指向刚刚添加的元素,这个元素是 pair ,然后递增 pair 的 second 成员。 若insert失败:递增已有指定关键字的元素的 second 成员。

练习11.22

给定一个map<string, vector>,对此容器的插入一个元素的insert版本,写出其参数类型和返回类型。

std::pair<std::string, std::vector<int>>    // 参数类型
std::pair<std::map<std::string, std::vector<int>>::iterator, bool> // 返回类型

练习11.23

11.2.1节练习中的map 以孩子的姓为关键字,保存他们的名的vector,用multimap 重写此map。

#include <map>
#include <string>
#include <iostream>using std::string;
using std::multimap;
using std::cin;
using std::endl;int main()
{multimap<string, string> families;for (string lname, cname; cin >> cname >> lname; families.emplace(lname, cname));for (auto const& family : families)std::cout << family.second << " " << family.first << endl;
}

练习11.24

下面的程序完成什么功能?

map<int, int> m;
m[0] = 1;

添加一个元素到 map 中,如果该键存在,则重新赋值。

练习11.25

对比下面的程序与上一题程序

vector<int> v;
v[0] = 1;

未定义行为,vector 的下标越界访问。

练习11.26

可以用什么类型来对一个map进行下标操作?下标运算符返回的类型是什么?请给出一个具体例子——即,定义一个map,然后写出一个可以用来对map进行下标操作的类型以及下标运算符将会返会的类型。

std::map<int, std::string> m = { { 1,"ss" },{ 2,"sz" } };
using KeyType = std::map<int, std::string>::key_type;	
using ReturnType = std::map<int, std::string>::mapped_type;

练习11.27

对于什么问题你会使用count来解决?什么时候你又会选择find呢?

对于允许重复关键字的容器,应该用 count ; 对于不允许重复关键字的容器,应该用 find 。

练习11.28

对一个string到int的vector的map,定义并初始化一个变量来保存在其上调用find所返回的结果。

map<string, vector<int>> m;
map<string, vector<int>>::iterator it = m.find("key");

练习11.29

如果给定的关键字不在容器中,upper_bound、lower_bound 和 equal_range 分别会返回什么?

如果给定的关键字不在容器中,则 lower_bound和 upper_bound 会返回相等的迭代器,指向一个不影响排序的关键字插入位置。而equal_range 会返回一个 pair,pair 中的两个迭代器都指向关键字可以插入的位置。

练习11.30

对于本节最后一个程序中的输出表达式,解释运算对象pos.first->second的含义。

pos 是一个 pair,pos.first 是一个迭代器,指向匹配关键字的元素,该元素是一个 pair,访问该元素的第二个成员。