std::map<std::string, size_t> people;第 1 个模板类型参数指定键的类型是字符串,第 2 个模板类型参数指定值的类型为 size_t。当然,这里的模板类型参数可以是任何类型,唯一的要求是键必须可以用 less<K> 比或用自己指定的另一个函数对象来替代。
std::map<std::string, size_t> people{{"Ann", 25}, {"Bill", 46},{"Jack", 32},{"Jill", 32}};初始化列表中的值是通过将每个嵌套花括号中的两个值传递给构造函数产生的,因此列表会包含 4 个 pair<const string,size_t> 对象。
std::map<std::string,size_t> people{std::make_pair("Ann",25),std::make_pair("Bill", 46),std::make_pair("Jack", 32),std::make_pair("Jill", 32)};make_pair<T1,T2>() 函数模板从函数参数中推断出类型参数值,因而由参数列表中调用 make_pair<>() 返回的是 <char const*,int> 类型的对象。因为这些对象都是 map 容器 people 的初始值,所以这些 pair 对象会被转换成 map 中元素的类型,即 pair<const string,size_t>。
std::map<std::string, size_t> personnel {people}; // Duplicate people mapmap 容器 personnel 包含 people 元素的副本。
std::map<std::string, size_t> personnel {std::begin(people),std::end(people)};这样就生成了 personnel,并且用 people 容器的迭代器指定的元素对它进行了初始化。map 容器提供了双向迭代器,这样就可以通过自增或自减访问元素。map 容器还提供了反向迭代器,所以可以从最后一个元素遍历到第一个元素。personnel 容器包含的元素和 people 完全相同。当然,也可以用另一个容器的元素子集来创建容器:
std::map<std::string,size_t> personnel {++std::begin(people),std::end(people)};
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有