汕头汽配网站建设,优良的定制网站建设制作商,域名不备案可以正常使用吗,批量发布文章到wordpress文章目录 一. map的介绍二. map的使用结束语 一. map的介绍 map是关联容器#xff0c;它按照特定的次序#xff08;按照key来比较#xff09;存储由键值key和值value组合而成的元素在map中#xff0c;键值key通常用于排序和唯一地标识元素#xff0c;而value中存储与此键值… 文章目录 一. map的介绍二. map的使用结束语 一. map的介绍 map是关联容器它按照特定的次序按照key来比较存储由键值key和值value组合而成的元素在map中键值key通常用于排序和唯一地标识元素而value中存储与此键值key关联的内容。键值key和值value的类型可能不同并且在map的内部key和value通过成员类型value_type绑定在一起为其取别名为pair typedef pairconst key,Tvalue_type;在内部map中的元素总是按照键值key进行比较排序map中通过键值访问单个元素的速度比unordered_map容器慢但map允许根据顺序对元素进行直接迭代即对map中的元素进行迭代时可以得到一个有序的序列map支持下标访问符即在[]中放下key就可以找到对应的valuemap 通常被实现为二叉搜索树更准确的说平衡二叉搜索树红黑树。 二. map的使用
map中存储的是pair T1 first就是key值T2 second就是value值
template class T1, class T2
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair(): first(T1()), second(T2())
{}
pair(const T1 a, const T2 b): first(a), second(b)
{}
};insert插入 我们测试一下map的插入 首先map存储的是pair这一数据类型我们可以使用pairstring,string的匿名构造但是这样写法较为复杂。 C就提供了一个make_pair的仿函数 使用make_pair这个仿函数的好处一是写法较为简便二是其会自动推导类型所以不需要像pair匿名构造那样需要指明类型。
其次map的迭代器解引用返回的是pair结构体不能直接输出需要再指定其内部属性。
不过map重载了-可以直接使用-输出。二者效果相同 operator[]重载
如果我们要统计水果的个数可以这样统计
我们也可以使用map的operator[]重载完成需求 我们解析一下operator[] 调用operator[]实际是调用这一大坨东西我们对其进行一个拆分 make_pair的返回值就是一个pair但是我们看到这里也使用了insert的返回值 接下来我们讲解一下insert的返回值 insert插入的value_type其实就是pair返回值也是一个pair但是这个pair的第一个参数是一个迭代器第二个参数是一个bool值 根据文献的描述如果插入的元素在map中不存在则插入返回的迭代器指向该元素位置如果已存在返回的迭代器指向该元素在map中的位置第二个bool值如果是新插入元素则返回真若元素已存在返回假。 所以( this-insert( make_pair( k,mapped_type() ) ) )其实就是一个pairiterator,bool 再取pair的的first就是iterator再解引用取到指向的pair最后取second属性就是value。并且返回该value的引用
所以如果水果不存在就插入value因为是int会调默认构造初始化为0然后返回value的引用就变成1了 如果水果存在不会插入但还是会返回value的引用就让value的值变大了。
所以operator[]的作用有四种 插入插入修改修改查找 dict[“left”]只指明了key则value需要调用string的默认构造 dict[“right”]“右边”开始同上但是[]返回value我们将其改成右边 dict[“string”]“(字符串)”前部分返回value的引用我们将其修改 因为[]会返回value则也可以查找。
结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话不妨点个赞支持一下博主拜托啦这对我真的很重要。