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

template<class T1,class T2>
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操作行为都是97影院调用RB-tree的操作行为

map的源码

template<class key,class T,class Copmpare=less<key>,class Alloc=alloc>
class map{
public:
typedef key key_type;
typedef T data_type;
typedef T mapped_type;
typedef pair<const Key,T>value_type;
typedef Compare key_compare;
/*以下是定义的仿函数,用于比较排序
class value_compare
:public binary_function<value_type,value_type,bool>
{
firend class map<Key,T,Compare,Alloc>;//与map友元
protect:www.97yingyuan.org
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_type,value_type, select<value_type>,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 <iostream>
#include <string>
#include <map>
#include <algorithm> using namespace std;
struct person
{
string name;
double sore;
};
int main()
{
map<int, person>x;
x.insert(map<int, person>::value_type(1,{"zyh",100}));
x.insert(map<int, person>::value_type(3, { "zlw",10 }));
x.insert(map<int, person>::value_type(2, { "hyf",1 }));
x.insert(map<int, person>::value_type(4, { "slj",3 })); pair<int, person>value(5,{ "srx",234 });//另外一种插入方式
x.insert(value); map<int, person>::iterator it = x.begin();//使用迭代器输出
for (; it != x.end(); it++)
{
cout << it->first << ' ' ;
cout << it->second.name << ' ';
cout << it->second.sore << endl;
} }

关于C++ STL标准库中map 的多元素应用的更多相关文章

  1. STL标准库中的容器

    容器:顾名思义,我的理解就是把同一种数据类型括起来,作为一捆.如vector<int> ,vector就是个容器,里面全是一个个的int型数据. 容器包括三大块: 顺序型容器: (1)ve ...

  2. 参考C++STL标准库中对了的使用方法

    http://www.cppblog.com/zhenglinbo/archive/2012/09/18/191170.html 参考:http://www.cppblog.com/zhenglinb ...

  3. STL标准库-容器-map和multimap

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...

  4. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  5. C++STL标准库学习笔记(五)set

    前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标记了出来,这一篇后面主要都是我的记录了,为了防止大片蓝色字体出现,后面就不改蓝色 ...

  6. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

  7. STL标准库-算法-常用算法

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 介绍11种STL标准库的算法,从这11种算法中总结一下算法的基本使用 1.accumulate() 累加 2.for_each( ...

  8. C++STL标准库学习笔记(三)multiset

    C++STL标准库学习笔记(三)multiset STL中的平衡二叉树数据结构 前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标 ...

  9. STL标准库-容器-set与multiset

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...

随机推荐

  1. jquery datatable 获取当前分页的数据

    使用jquery datatable 遇到分页分别求和时,找了半天才找到获取当前分页数据的方法,以此总结 var table=$('#example').DataTable( { "pagi ...

  2. SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决方案

    错误详情如下: SQLState:'01000' SQL Server 错误:14 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOp ...

  3. VS打包方法(安装和部署简介)——内含大量图片,密症慎入!

    友情提示:内含大量文字.图片,密集恐惧症者慎入! 主要记述一下利用微软集成开发环境VS打包的方法和详细步骤. 1.新建打包工程 打开VS,文件->添加项目->新建项目(如图1),在添加新项 ...

  4. IOS tableView 去除分割线 和 不允许选中表格cell

    //去除分割线 self.tableView.backgroundColor=[UIColor colorWithRed:///255.0 alpha:1.0]; self.tableView.sep ...

  5. 【洛谷2522】[HAOI2011] Problem b(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=a}^b\sum_{y=c}^d[gcd(x,y)==k]\). 关于另一道题目 在看这篇博客之前,如果你做过一道叫做[BZOJ1101][POI2007 ...

  6. modprobe与insmod的区别

    linux设备驱动有两种加载方式insmod和modprobe,下面谈谈它们用法上的区别1.insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址.写法为:        insmod dr ...

  7. PAT (Basic Level) Practise (中文)- 1002. 写出这个数 (20)

    http://www.patest.cn/contests/pat-b-practise/1002 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个 ...

  8. Bootstrap HTML编码规范

    语法 1.用两个空格来代替制表符(Tab)--这是唯一能保证在所有的环境下获得一致展现的方法. 2.嵌套元素应当缩进一次(即两个空格). 3.对于属性的定义,属性值确保全部都用双引(避免使用单引号). ...

  9. 初尝微信小程序3-移动设备的分辨率与rpx

    屏幕尺寸就是实际的物理尺寸. 分辨率(pt),是逻辑分辨率,pt的大小只和屏幕尺寸有关,简单可以理解为长度和视觉单位. 分辨率(px),是物理分辨率,单位是像素点,和屏幕尺寸没有关系. 微信开发者工具 ...

  10. 防止内存泄露 Linux下用Valgrind做检查

    用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一 ...