关于C++ STL标准库中map 的多元素应用
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 的多元素应用的更多相关文章
- STL标准库中的容器
容器:顾名思义,我的理解就是把同一种数据类型括起来,作为一捆.如vector<int> ,vector就是个容器,里面全是一个个的int型数据. 容器包括三大块: 顺序型容器: (1)ve ...
- 参考C++STL标准库中对了的使用方法
http://www.cppblog.com/zhenglinbo/archive/2012/09/18/191170.html 参考:http://www.cppblog.com/zhenglinb ...
- STL标准库-容器-map和multimap
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...
- STL标准库-容器-set与map
STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...
- C++STL标准库学习笔记(五)set
前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标记了出来,这一篇后面主要都是我的记录了,为了防止大片蓝色字体出现,后面就不改蓝色 ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
- STL标准库-算法-常用算法
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 介绍11种STL标准库的算法,从这11种算法中总结一下算法的基本使用 1.accumulate() 累加 2.for_each( ...
- C++STL标准库学习笔记(三)multiset
C++STL标准库学习笔记(三)multiset STL中的平衡二叉树数据结构 前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标 ...
- STL标准库-容器-set与multiset
技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...
随机推荐
- sweetalert 1.0多次回调函数bug
一个删除功能,原来的实现方式(注释部分)有多次的回调,会出现第二个swal窗口不显示,回调函数体不执行的情况.后来的解决方式是使用bootstrap的modal模态框,删除成功后显示模态框,模态框关闭 ...
- [Asp.Net] Global.asax
Global.asax.cs文件会被编译到对应的dll 但部署是还需要Global.asax文件 class Global中的方法才会在程序启动时执行
- 如何在ABAP Netweaver和CloudFoundry里记录并查看日志
Netweaver 要记录日志需要有一个checkpoint group,可以自行创建也可以使用标准的.这里我重用标准的group:DEMO_CHECKPOINT_GROUP. tcode SAAB, ...
- python_61_装饰器4
import time def timer(func):#timer(test1) func=test1 def deco(): start_time=time.time() func()#run t ...
- java 程序设计第三次作业内容
第一题:输出结果是什么? System.out.println("5+5="+5+5); 第二题:输出结果是什么? int a=3,b; b=a++; sop("a=&q ...
- fstatfs/statfs详解
[fstatfs/statfs系统调用] 功能描述: 查询文件系统相关的信息. 用法: #include <sys/vfs.h> /* 或者 <sy ...
- webpack4.x ,1基本项目构建 详解
1.先创建个文件夹 比如叫 webApp 用编译器打开 2.安装全局的webpack 和webpack-cli 及 webpack-dev-server 命令如下 npm install webpac ...
- 【转】 bind1st bind2nd的使用
以前在使用stl的过程中发现bind1st和bind2nd这两个函数,当时不太理解什么意思,今天在网上查了一下相关资料发现竟然很简单,下面我就具体解释一下他们的用法. bind1st和bind2nd函 ...
- jrtplib库使用简解
RTP有效载荷类型即时间截解释 =============================== https://www.cnblogs.com/wyqfighting/archive/2013/03/ ...
- AT2386 Colorful Hats (乱搞题,思维题)
分情况讨论的神题... max不等于min + 1 或者不等于min,这种情况显然不存在. 如果都等于一个数 有两种情况: 互相独立,那么a[i]肯定==n-1 有相同的,那么a[i]一定不是独立的. ...