STL之六:map/multimap用法详解

转载于: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

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类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。

时间: 2024-12-17 14:13:37

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

STL list链表的用法详解(转)

本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函数push_back和push_front插入一个元素到list中 3 list的成员函数empty() 4 用for循环来处理list中的元素 5 用STL的通用算法for_each来处理list中的元素 6 用STL的通用算法count_if()来统计list中的元素个数 7 使用count_i

STL之map容器的详解

一.关于map的介绍 map是STL的 一个容器,和set一样,map也是一种关联式容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键 字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据.这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的.学习map我们一定要理解什么是一对一的数据映射?比如:一个班级中,每个学生的学号跟他的姓名

C语言 &#183; C++中map的用法详解

转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义   (1) map<string,   int>   Map;     (2) 或者是:typedef   map<string,int>   Mymap;                       Mymap   Map; 二.插入数据  插入数据之前先说一下pair 和 make_pair 的用法pair是一个结构体,有first和second 两个

Java中Map的用法详解

Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如HashMap 类. 注:将可变对象用作映射键时必须格外小心.当对

STL之一:字符串用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可完成.string字符串类减少了C语言编程中三种最常见且最具破坏性的错误:超越数组边界:通过违背初始化或被赋以错误值的指针来访问数组元素:以及在释放了某一数组原先所分配的存储单元后仍保留了“悬挂”指针. string 函数列表 函数名 描述 begin

C++ STL replace()函数常用用法详解

replace算法: replace函数包含于头文件#include<string>中. 泛型算法replace把队列中与给定值相等的所有值替换为另一个值,整个队列都被扫描,即此算法的各个版本都在 线性时间内执行---其复杂度为O(n). 即replace的执行要遍历由区间[frist,last)限定的整个队列,以把old_value替换成new_value. 下面介绍replace()函数常用的九中方法: 用法一: 用str替换指定字符串从起始位置pos开始长度为len的字符 示例代码: #

map函数用法详解

map函数是Python内置的高阶函数,它是一个典型的函数式编程例子.它的参数为: 一个函数function.一个或多个sequence.通过把函数function依次作用在sequence的每个元素上,得到一个新的sequence并返回.注意:map函数不改变原有的sequence,而是返回一个新的sequence. 以列表为例说明:lst = [1, 2, 3, 4, 5, 6, 7, 8, 9,10]希望得到lst中每个元素的平方,这时我们就可以用到map函数. #Python版本: 3.

STL之三:deque用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8519812 deque函数: deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列.deque类常用的函数如下. (1)    构造函数 deque():创建一个空deque deque(int nSize):创建一

STL中的map用法详解

STL中map用法详解 说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂.本人水平有限,不当之处,望大家辅正. 一.map概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),