博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C++ STL标准库中map 的多元素应用
阅读量:5099 次
发布时间:2019-06-13

本文共 1985 字,大约阅读时间需要 6 分钟。

map的特性是,所有的元素会根据键值自动排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一个元素被视为键值,第二个被视为实质

piar 的定义

template
struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; //为public T2 second;//为public pair():first(T1()),second(T2()){} pair(const T1&a,const T2&b):first(a),second(b){} };

注意:

1.使用map不能修改元素的key,这会影响map元素的排列规则,会破坏map组织
2.可以修改元素的value
3.标准的STL的map以RB-tree为底层机制,由于map所开放的各种操作接口,所以几乎map操作行为都是调用RB-tree的操作行为

map的源码

template
,class Alloc=alloc> class map{ public: typedef key key_type; typedef T data_type; typedef T mapped_type; typedef pair
value_type; typedef Compare key_compare; /*以下是定义的仿函数,用于比较排序 class value_compare :public binary_function
{ firend class map
;//与map友元 protect: compare comp; value_compare(Compare c):comp(c){} public: bool operator(const value& x,const value_type&y)const { return comp(x.first ,y.first); } } private: /*以下定义表述型别。以map元素型别(一个pair)的第一型别,作为RB-tree节点的键值型别 typedef rb_tree
,key_compare,Alloc>rep_type; rep_type t; public: typedef typename...... //类型名的重命名 map():t(Compare()) {}.........//map的构造以及map的各种操作 }

从map中的源码首先可看出

1.map和RB-tree的关系
2.map中以pair为第一型别又被typedef为value_type
3.比较时用到了仿函数友元函数
以下是测试程序,经过思考pair是结构体,我们也可以输入结构体达到>=2参数的输入以及使用
//

 
#include "stdafx.h"    #include 
#include
#include
#include
using namespace std; struct person { string name; double sore; }; int main() { map
x; x.insert(map
::value_type(1,{ "zyh",100})); x.insert(map
::value_type(3, { "zlw",10 })); x.insert(map
::value_type(2, { "hyf",1 })); x.insert(map
::value_type(4, { "slj",3 })); pair
value(5,{ "srx",234 });//另外一种插入方式 x.insert(value); map
::iterator it = x.begin();//使用迭代器输出 for (; it != x.end(); it++) { cout << it->first << ' ' ; cout << it->second.name << ' '; cout << it->second.sore << endl; } }

转载于:https://www.cnblogs.com/tianshifu/p/7840997.html

你可能感兴趣的文章
Webstorm上面通过babel将es6转化为es5
查看>>
黑马程序员 参数化查询避免SQL注入漏洞攻击
查看>>
jzoj100029
查看>>
起底多线程同步锁(iOS)
查看>>
[BZOJ 1951] 古代猪文
查看>>
数据库系统原理——ER图转换成关系模式集的算法
查看>>
SPOJ KPSUM ★(数位DP)
查看>>
Python-requests之POST Data的json问题
查看>>
【Linux高级驱动】网卡驱动分析
查看>>
字符串处理函数
查看>>
jenkins修改时区
查看>>
比较git commit 两个版本之间次数
查看>>
jQuery.support
查看>>
java实现的加密解密
查看>>
网页瀑布流效果实现的几种方式
查看>>
LINUX与UNIX区别在哪
查看>>
python 快速排序代码
查看>>
Python装饰器学习(九步入门)
查看>>
通信原理1
查看>>
前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)
查看>>