11.1 使用关联容器
- map类型通常被常被称为关联数组。关联数组与正常数组类似,不同之处在于其下标不必是整数
- set就是关键字的简单集合,当想知道一个值是否存在时,set是最有用的
使用map
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(int argc, char** argv)
{
map<string, size_t> wordCount;
string word ;
while (cin >> word)
{
++wordCount[word];
if(word=="0")
break;
}
for (const auto &w : wordCount)
{
cout << w.first << " : " << w.second << ends;
}
return 0;
}
C++ basic_string::_S_construct null not valid
stackoverflow例子
std::string 字符串不可以初始化为NULL,虽然能通过编译,但是会出现运行错误。
std::string 使用以下两种初始化为空的方式:
std::string s;//执行默认构造函数
std::string s = "";//执行拷贝构造函数
- 当从map中提取一个元素时,会得到一个pair类型的对象。pair是一个模板类型,保存两个名为first和second的数据成员。前者保存关键字后者保存对应的值。
使用set
- 如果给定关键字在set集合中,迭代器指向关键字。否则find返回尾喉迭代器。
11.2 关联容器概述
11.2 定义关联容器
初始化multimap或multiset
C++ Primer 中指出,size_type是一种类型,确保能够保存可能存在的最大向量中的所有元素,这句话究竟怎么理解?
答:
所谓 size_type 就是这个“vector 的 size 的类型”。size就是指vector有多少个元素,这个“多少个”也是个整型值,它的类型就是 size_type。
举个具体的例子:
假如有个vector,你调用size()来得到它有多少个元素,你要把这个值存在一个变量里,那么这个变量该声明为什么类型呢?int 型吗? 万一这个vector的元素数超过了 int 的范围呢? 要不就用 long? 万一也不够用呢??
所以,我们把 size_type 作为这个 size 值的类型,你只要声明一个 size_type 类型的变量就能存下“元素个数”的值。顺便一提,在 C 语言中 size_t 指的是系统中最大的整型类型,一般在前述情况下都是使用 size_t 类型的。size_t不是容器概念,而size_type是容器概念,没有容器不能使用。size_type和size_t没有本质区别。
11.2.2 关键字类型的要求
有序容器的关键字类型
使用关键字类型的比较函数
11.2.3 pair类型
- 这是一个标准库类型,定义在头文件
utility
中 - 一个pair保存两个数据成员,是一个用来生成特定类型的模板
创建pair对象的函数
11.3 关联容器操作
11.3.1 关联容器迭代器
set的迭代器是const的
遍历关联容器
关联容器和算法
11.3.2 添加元素