转载于:http://blog.csdn.net/longshengguoji/article/details/8547007

map/multimap

使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。

map和multimap内部的数据结构也是平衡二叉树。

map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。

常用函数

1.构造函数和析构函数

map m:创建空映射,不包含任何元素

map m(op):以op为排序准则,产生一个空的map

map m1(m2):复制c2中的元素到c1中

map m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射

map m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射。

m.~set()销毁所有元素,释放内存

multimap mm:创建空映射,不包含任何元素

multimap mm(op):以op为排序准则,产生一个空的multimap

multimap m1(m2):复制m2中的元素到m1中

multimap m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射

multimap m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射

m.~multimap()销毁所有元素,释放内存

#include "stdafx.h"
#include <iostream>
#include <map> using namespace std; bool fncomp (char lhs, char rhs) {return lhs<rhs;} struct classcomp {
bool operator() (const char& lhs, const char& rhs) const
{return lhs<rhs;}
}; int main ()
{
map<char,int> first; first['a']=10;
first['b']=30;
first['c']=50;
first['d']=70; map<char,int> second (first.begin(),first.end()); map<char,int> third (second); map<char,int,classcomp> fourth; // class as Compare bool(*fn_pt)(char,char) = fncomp;
map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare return 0;
}

2.大小、判断空函数

int size() const:返回容器元素个数
    bool empty() const:判断容器是否空,若返回true,表明容器已空。

3.增加删除函数

iterator insert(const value_type& x):插入元素x

Map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(, “student_one”));
Map<int, string> mapStudent;
mapStudent.insert(map<int, string>::value_type (, “student_one”));

iterator insert(iterator it,const value_type& x):在迭代指针it处插入元素x
    void insert(const value_type *first,const value_type* last):插入[first, last)之间元素

iterator erase(iterator it):删除迭代指针it处元素

iterator erase(iterator first,iterator last):删除[first, last)之间元素

size_type erase(const Key& key):删除键值等于key的元素

#include "stdafx.h"
#include <iostream>
#include <map> using namespace std; int main ()
{
map<char,int> mymap; mymap.insert(pair<char,int>('a',10));
mymap.insert(pair<char,int>('z',200)); pair<map<char,int>::iterator,bool> ret;
ret = mymap.insert(pair<char,int>('z',500));
if (ret.second == false)
{
cout<<"element 'z' already existed";
cout<<"with a value of "<<ret.first->second<<'\n';
} map<char,int>::iterator it = mymap.begin();
mymap.insert(it,pair<char,int>('b',300));
mymap.insert(it,pair<char,int>('c',400)); map<char,int> anothermap;
anothermap.insert(mymap.begin(),mymap.find('c')); cout<<"mymap contains :\n";
for (it = mymap.begin();it!= mymap.end();it++)
{
cout<<it->first<<"=>"<<it->second<<'\n';
} cout<<"anothermap contains :\n";
for (it = anothermap.begin();it!= anothermap.end();it++)
{
cout<<it->first<<"=>"<<it->second<<'\n';
}
return 0;
}

上述代码运行结果为

#include "stdafx.h"
#include <iostream>
#include <map> using namespace std; int main ()
{
map<char,int> mymap;
map<char,int>::iterator it; mymap['a'] = 10;
mymap['b'] = 20;
mymap['c'] = 30;
mymap['d'] = 40;
mymap['e'] = 50;
mymap.insert(pair<char,int>('f',60)); cout<<"initial mymap contains :\n";
for (it = mymap.begin();it!= mymap.end();it++)
{
cout<<it->first<<"=>"<<it->second<<'\n';
} it = mymap.find('b');
mymap.erase(it); mymap.erase('c'); it = mymap.find('e');
mymap.erase(it,mymap.end()); cout<<"now mymap contains :\n";
for (it = mymap.begin();it!= mymap.end();it++)
{
cout<<it->first<<"=>"<<it->second<<'\n';
} return 0;
}

上述代码运行结果为:

如果想往map/multimap中修改一个映射的值,应先插入一个新映射,再把与修改的映射删除。

4.遍历函数

iterator begin():返回首元素的迭代器指针

iterator end():返回尾元素的迭代器指针

reverse_iterator rbegin():返回尾元素的逆向迭代器指针

reverse_iterator rend():返回首元素前一个位置的迭代器指针

5.操作函数

    const_iterator lower_bound(const Key& key):返回键值大于等于key的迭代器指针
    const_iterator upper_bound(const Key& key):返回键值大于key的迭代器指针
    int count(const Key& key) const:返回键值等于key的元素的个数
    pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中键值等于key的迭代指针[first, last)
    const_iterator find(const Key& key) const:查找功能,返回键值等于key的迭代器指针
    void swap(set& s):交换但映射元素
    void swap(multiset& s):交换多映射元素  

6.特殊函数

reference operator[](const Key& k):仅在但映射map类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。

STL之六:map/multimap用法详解的更多相关文章

  1. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  2. STL map 常见用法详解

    <算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...

  3. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  4. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

  5. C++标准模板库(STL)——map常见用法详解

    map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...

  6. [转]Java中Map的用法详解

    转载地址:http://www.zhixing123.cn/jsp/30113.html Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictio ...

  7. Java中Map的用法详解

    Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collecti ...

  8. RxJava(二) map操作符用法详解

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51531348 本文出自:[余志强的博客] 1 map操作符的作用 R ...

  9. C语言 · C++中map的用法详解

    转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义   (1) map<string,   int>   Map ...

随机推荐

  1. chorme打开网页的技巧

    恢复之前关闭的网页 ctr l+ shift + t 打开之前不小心关闭的网页 临时书签 在设置书签中有 为打开的网页添加书签 的选项, 清除地址栏搜索记录 首先需要退出个人谷歌账户,账户上的搜索记录 ...

  2. LeetCode 95——不同的二叉搜索树 II

    1. 题目 2. 解答 以 \(1, 2, \cdots, n\) 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树.当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将 ...

  3. Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点

    Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点 一.安装docker 执行代码如下: curl -sSL https://get.daocloud.io ...

  4. 一些容易记混的c++相关知识点

    一些容易记混的c++相关知识. 截图自:<王道程序员面试宝典>

  5. 科普:PCI-E插槽都有哪些样子?

    主板上的扩展插槽曾经是多种多样的,例如曾经非常流行的组合就是PCI插槽搭配AGP插槽,其中AGP插槽主要用在显卡上,而PCI插槽的用途则更广一些,不仅有用在显卡上,还能用于扩展其它设备,如网卡.声卡. ...

  6. ACM 第十五天

    计算几何基础 练习题 C - Wasted Time Mr. Scrooge, a very busy man, decided to count the time he wastes on all ...

  7. Javascript动态方法调用与参数修改的问题

    Javascript中可以对所传参数在函数内进行修改,如下 ? 1 2 3 4 5 function func1(name) {     name = 'lily';     alert(name); ...

  8. 基于3D卷积神经网络的人体行为理解(论文笔记)(转)

    基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...

  9. MongoDb企业应用实战(一) 写在MongoDB应用介绍之前(ii)

    上一篇: MongoDb企业应用实战(一) 写在MongoDB应用介绍之前(i) 有段时间没跟大家去分享和探讨过一些问题,分享过一些经验了(失败过的,痛苦过的才最有看点啊,不知道各位同仁们怎么去看这个 ...

  10. laravel5.6 后台无法退出,必须清楚浏览器缓存才能退出

    方法一: 在后台,admin/logincontroleer.php 中  可行 public function logout(Request $request) { Auth::logout(); ...