关于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 ...
随机推荐
- LeetCode Valid Palindrome 有效回文(字符串)
class Solution { public: bool isPalindrome(string s) { if(s=="") return true; ) return tru ...
- 洛谷 P1077 摆花
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- 用JavaScript访问SAP云平台上的服务遇到跨域问题该怎么办
关于JavaScript的跨域问题(Cross Domain)的讨论, 网上有太多的资源了.国内的程序猿写了非常多的优秀文章,Jerry这里就不再重复了. 直入主题,最近我正在做一个原型开发:通过SA ...
- Android SDK下载OpenMobile api
在Android SDK Manager的Tools -> Manager Add-on sites... -> User Defined Sites中,添加以下地址: http://se ...
- MySQL binlog server
从5.6版本开始,可以利用 mysqlbinlog命令把远程机器的日志备份到本地目录,这样就更加方便快捷的实现一个binlog server. 环境介绍:192.168.56.100是备份服务器,19 ...
- 使用OpenFileDialog组件打开多个文
实现效果: 知识运用: OpenFileDialog组件的Multiselect属性 //是否允许多选 public bool Multiselect {get;ser;} FileNames属性 / ...
- MooseFS 3.0 集群环境部署过程
1 准备好6台虚拟机:(centos7) Master server: 192.168.242.135 Cgi server: 192.168.242.135 meta ...
- java基础编程——重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- java基础编程——链表反转
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目代码 /** * @program: JavaCode * @description:输入一个链表,按链表值从尾到头 ...
- 使用FreeMarker导出word文档(支持导出图片)
一.添加maven依赖,导入FreeMarker所需要的jar包 <dependency> <groupId>org.freemarker</groupId> &l ...