STL中map用法详解

合集下载

c++中的map的用法

c++中的map的用法

c++中的map的用法Map是一种关联容器,它提供了一种映射的方式,将一个值(value)与一个键(key)相对应。

在C++ STL(Standard Template Library)中,Map是一个非常常用的容器类型,它具有很高的效率和灵活性。

Map内部使用红黑树(一种自平衡的二叉搜索树)来进行高效的查找和插入操作,它的不同之处在于,它的每个节点都包含了一个键值对,其中键是唯一的。

使用Map之前需要引入头文件<map>,其使用方法是:```c++#include <map>map<key_type, value_type> my_map;```key_type表示键的类型,value_type表示值的类型。

Map的常用操作包括:1. 插入Map的插入可以使用insert()函数,例如:```c++//插入键值对//使用数组下标插入my_map["Jerry"] = 20;```2. 查找Map的查找可以使用find()函数,例如:```c++//查找键为"Tom"的值map<string, int>::iterator it = my_map.find("Tom");if (it != my_map.end()) { //如果找到了cout << "Tom's age is " << it->second << endl; //输出Tom的年龄}```3. 删除Map的删除可以使用erase()函数。

例如:```c++//删除键为"Tom"的值my_map.erase("Tom");```4. 遍历Map的遍历可以使用迭代器,例如:```c++//遍历map中的所有键值对for (auto it = my_map.begin(); it != my_map.end(); it++) {cout << "key is " << it->first << " , value is " << it->second << endl;}```需要注意的是,Map中的元素是按照键的大小进行排序的,如果需要按照值的大小进行排序,可以使用multimap容器。

c++ stl unordered_map与hashmap 实现原理

c++ stl unordered_map与hashmap 实现原理

C++ STL 中的 `std::unordered_map` 是一个使用哈希表(hash table)实现的关联容器,提供了快速的查找、插入和删除操作。

在C++中,`std::unordered_map` 的实现原理主要是基于哈希表,而哈希表本身是一种通过计算键的哈希值来快速定位存储位置的数据结构。

下面简要介绍一下 `std::unordered_map` 和哈希表的实现原理:### std::unordered_map`std::unordered_map` 是 C++ 标准库中用于存储键值对的容器。

它以键为索引,可以快速地通过键查找对应的值。

在 `std::unordered_map` 中,每个键值对是一个元素,其中键是唯一的,不允许重复。

### 哈希表实现原理哈希表是基于哈希函数的一种数据结构,它通过将键映射到索引的方式来实现高效的查找操作。

哈希表一般包括以下几个关键组成部分:1. 哈希函数:将键映射到哈希表中的索引位置的函数。

这个函数需要具有良好的分布特性,能够将不同的键均匀地映射到不同的索引位置上。

2. 数组:用于存储实际的键值对数据。

哈希表内部通常使用数组来作为存储结构,每个元素存储一个链表或者红黑树,用于解决哈希冲突问题。

3. 冲突处理:由于哈希函数的映射不是一一对应的,可能会出现不同的键映射到相同的索引位置,这就是哈希冲突。

常见的处理方法包括链地址法(Chaining)、开放定址法(Open Addressing)和再哈希等。

在 `std::unordered_map` 中,哈希表一般采用拉链法(Chaining)来处理冲突,即使用数组存储链表,当多个键映射到同一索引位置时,将它们放入同一个索引位置对应的链表中。

当链表过长时,可以转换为红黑树,以提高查找效率。

总的来说,`std::unordered_map` 使用哈希表作为底层数据结构,通过哈希函数将键映射到对应的索引位置,并采用链表或红黑树来处理哈希冲突,从而实现快速的插入、删除和查找操作。

c++hashmap stl方法

c++hashmap stl方法

C++中的hashmap是一种非常强大的数据结构,它提供了快速查找、插入和删除元素的功能。

在STL(标准模板库)中,我们可以使用hashmap来实现这些功能,从而提高程序的性能和效率。

本文将详细介绍C++中hashmap的STL方法,包括其基本原理、使用方法及一些实际应用。

一、hashmap的基本原理hashmap是一种将键和值相关联的数据结构,它通过哈希函数将键映射到存储值的位置。

这样可以实现快速的查找、插入和删除操作,时间复杂度为O(1)。

在C++中,STL提供了unordered_map模板类用来实现hashmap。

unordered_map使用哈希表来存储数据,每个元素都包括一个键和一个值。

它使用哈希函数将键映射到桶(bucket)中,桶是存储元素的基本单元。

当我们需要查找、插入或删除元素时,只需计算键的哈希值并将其映射到对应的桶中,然后在桶中进行操作。

二、unordered_map的使用方法在C++中,使用unordered_map非常简单,首先需要包含<unordered_map>头文件,然后可以定义一个unordered_map对象并开始使用。

下面是一个简单的示例:```cpp#include <iostream>#include <unordered_map>int m本人n() {std::unordered_map<int, std::string> umap;// 插入操作umap[1] = "one";umap[2] = "two";umap[3] = "three";// 查找操作std::cout << umap[2] << std::endl; // 输出:two// 删除操作umap.erase(3);return 0;}```在上面的示例中,我们首先定义了一个unordered_map对象umap,其键的类型为int,值的类型为std::string。

map函数简介

map函数简介

map函数简介简简单单讲map(一)map函数map BLOCK LISTmap EXPR, LISTmap函数对LIST里的每个元素按BLOCK或EXPR进行计算,遍历LIST时,临时将LIST里的每个元素赋值给$_变量。

map对每次的计算返回一个结果列表,它在列表上下文里计算BLOCK或EXPR。

每个LIST元素可能在输出列表里产生0个,1个,或多个元素。

(仙子注:上文是说遍历每个LIST元素时产生一个结果列表,而不是说总的map结果是个列表,不要搞混了哦。

)在标量上下文里,map返回结果列表的元素数量。

在HASH上下文里,输出列表(a,b,c,d...)会变成这样的形式: ( a =>; b, c =>; d, ... )。

假如输出列表的元素数量非对称,那么最后的hash元素的值就是undef了。

避免在BLOCK或EXPR里修改$_,因为这会修改LIST里的元素。

另外,避免使用map返回的的列表作为左值,因为这也会修改LIST里的元素。

(所谓左值,就是在某个表达式左边的变量。

)(二)Map vs. grep vs. foreachmap跟grep一样,从数组里选择元素。

下列2句是一样的:@selected = grep EXPR, @input;@selected = map { if (EXPR) { $_ } } @input;另外,map也是foreach陈述的特殊形式。

假如@transformed 数组当前未定义或为空,那么下列2句亦相等:foreach (@input) { push @transformed, EXPR; }@transformed = map EXPR, @input;通常,用grep来从数组里选择元素,用map来从数组里转换元素。

当然,数组处理也能使用标准的循环语句来完成(foreach, for, while, until, do while, do until, redo)。

std::map用法

std::map用法

std::map⽤法STL是标准C++系统的⼀组模板类,使⽤STL模板类最⼤的好处就是在各种C++编译器上都通⽤。

在STL模板类中,⽤于线性数据存储管理的类主要有vector, list, map 等等。

本⽂主要针对map对象,结合⾃⼰学习该对象的过程,讲解⼀下具体⽤法。

本⼈初学,⽔平有限,讲解差错之处,请⼤家多多批评指正。

map对象所实现的功能跟MFC得CMap相似,但是根据⼀些⽂章的介绍和论述,MFC CMap在个⽅⾯都与STL map有⼀定的差距,例如不是C++标准,不⽀持赋值构造,对象化概念不清晰等等。

使⽤map对象⾸先要包括头⽂件,包含语句中必须加⼊如下包含声明#include <map>注意,STL头⽂件没有扩展名.h包括头⽂件后就可以定义和使⽤map对象了,map对象是模板类,需要关键字和存储对象两个模板参数,例如:std:map<int, CString> enumMap;这样就定义了⼀个⽤int作为关键字检索CString条⽬的map对象,std表⽰命名空间,map对象在std名字空间中,为了⽅便,在这⾥我仍然使⽤了CString类,其实应该使⽤标准C++的std::string类,我们对模板类进⾏⼀下类型定义,这样⽤的⽅便,当然,不定义也可以,代码如下:typedef std:map<int, CString> UDT_MAP_INT_CSTRING;UDT_MAP_INT_CSTRING enumMap;如此map对象就定义好了,增加,改变map中的条⽬⾮常简单,因为map类已经对[]操作符进⾏了重载,代码如下:enumMap[1] = "One";enumMap[2] = "Two";.....enumMap[1] = "One Edit";或者insert⽅法enumMap.insert(make_pair(1,"One"));返回map中⽬前存储条⽬的总数⽤size()⽅法:int nSize = enumMap.size();查找map中是否包含某个关键字条⽬⽤find⽅法,传⼊的参数是要查找的key,在我们的例⼦⾥,是⼀个int数据,map中的条⽬数据是顺序存储的,被称作为⼀个sequence,在这⾥需要提到的是begin()和end()两个成员,分别代表map对象中第⼀个条⽬和最后⼀个条⽬,这两个数据的类型是iterator,iterator被定义为map中条⽬的类型,查找是否包含某个条⽬的代码如下:int nFindKey = 2; //要查找的KeyUDT_MAP_INT_CSTRING::iterator it; //定义⼀个条⽬变量(实际是指针)it = enumMap.find(nFindKey);if(it == enumMap.end()) {//没找到}else {//找到}//find的时候注意key的数据类型,最好⽤CString之类的能消除数据类型差异的key,否则可能会出现强制转换后仍找不到的情况。

C++ STL模板和Map使用大全

C++ STL模板和Map使用大全

C++ STL模板和Map使用大全C++map的基本操作和使用(2009-09-23 14:58:21)分类:nguages标签:cmap编程基本操作livehaiitMap是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数;map<string , int >mapstring; map<int ,string >mapint;map<sring, char>mapstring; map< char ,string>mapchar;map<char ,int>mapchar; map<int ,char >mapint;2. map添加数据;map<int ,string> maplive;1.maplive.insert(pair<int,string>(102,"aclive"));2.maplive.insert(map<int,string>::value_type(321,"hai"));3, maplive[112]="April";//map中最简单最常用的插入添加!3,map中元素的查找:find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

map<int ,string >::iterator l_it;;l_it=maplive.find(112);if(l_it==maplive.end())cout<<"we do not find 112"<<endl;else cout<<"wo find 112"<<endl;4,map中元素的删除:如果删除112;map<int ,string >::iterator l_it;;l_it=maplive.find(112);if(l_it==maplive.end())cout<<"we do not find 112"<<endl;else maplive.erase(l_it); //delete 112;5,map中swap的用法:Map中的swap不是一个容器中的元素交换,而是两个容器交换; For example:#include <map>#include <iostream>using namespace std;int main( ){map <int, int> m1, m2, m3;map <int, int>::iterator m1_Iter;m1.insert ( pair <int, int> ( 1, 10 ) );m1.insert ( pair <int, int> ( 2, 20 ) );m1.insert ( pair <int, int> ( 3, 30 ) );m2.insert ( pair <int, int> ( 10, 100 ) );m2.insert ( pair <int, int> ( 20, 200 ) );m3.insert ( pair <int, int> ( 30, 300 ) );cout << "The original map m1 is:";for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )cout << " " << m1_Iter->second;cout << "." << endl;// This is the member function version of swap//m2 is said to be the argument map; m1 the target mapm1.swap( m2 );cout << "After swapping with m2, map m1 is:";for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )cout << " " << m1_Iter -> second;cout << "." << endl;cout << "After swapping with m2, map m2 is:";for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )cout << " " << m1_Iter -> second;cout << "." << endl;// This is the specialized template version of swapswap( m1, m3 );cout << "After swapping with m3, map m1 is:";for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )cout << " " << m1_Iter -> second;cout << "." << endl;}6.map的sort问题:Map中的元素是自动按key升序排序,所以不能对map用sort函数:For example:#include <map>#include <iostream>using namespace std;int main( ){map <int, int> m1;map <int, int>::iterator m1_Iter;m1.insert ( pair <int, int> ( 1, 20 ) );m1.insert ( pair <int, int> ( 4, 40 ) );m1.insert ( pair <int, int> ( 3, 60 ) );m1.insert ( pair <int, int> ( 2, 50 ) );m1.insert ( pair <int, int> ( 6, 40 ) );m1.insert ( pair <int, int> ( 7, 30 ) );cout << "The original map m1 is:"<<endl;for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;}The original map m1 is:1 202 503 604 406 407 30请按任意键继续. . .7, map的基本操作函数:C++ Maps是一种关联式容器,包含“关键字/值”对begin() 返回指向map头部的迭代器clear()删除所有元素count() 返回指定元素出现的次数empty() 如果map为空则返回trueend() 返回指向map末尾的迭代器equal_range() 返回特殊条目的迭代器对erase() 删除一个元素find() 查找一个元素get_allocator() 返回map的配置器insert() 插入元素key_comp() 返回比较元素key的函数lower_bound() 返回键值>=给定元素的第一个位置max_size() 返回可以容纳的最大元素个数rbegin() 返回一个指向map尾部的逆向迭代器rend() 返回一个指向map头部的逆向迭代器size() 返回map中元素的个数swap() 交换两个mapupper_bound() 返回键值>给定元素的第一个位置value_comp() 返回比较元素value的函数C++map的基本操作和使用(2009-09-23 14:58:21)分类:nguages标签:cmap编程基本操作livehaiitMap是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数;map<string , int >mapstring; map<int ,string >mapint;map<sring, char>mapstring; map< char ,string>mapchar;map<char ,int>mapchar; map<int ,char >mapint;2. map添加数据;map<int ,string> maplive;1.maplive.insert(pair<int,string>(102,"aclive"));2.maplive.insert(map<int,string>::value_type(321,"hai"));3, maplive[112]="April";//map中最简单最常用的插入添加!3,map中元素的查找:find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

C++使用:C++中map的基本操作和用法

C++使用:C++中map的基本操作和用法

C++使⽤:C++中map的基本操作和⽤法在阅读SSD代码中发现作者使⽤了C++中的map⽅法,因此搜索该关联式容器的使⽤⽅法,在这⾥⼀并总结。

⼀、Map 簡介Map是STL的⼀個容器,它提供⼀對⼀的hash。

第⼀個可以稱為關鍵字(key),每個關鍵字只能在map中出現⼀次,第⼆個可能稱為該關鍵字的值(value)Map以模板(泛型)⽅式實現,可以儲存任意類型的變數,包括使⽤者⾃定義的資料型態。

Map主要⽤於資料⼀對⼀映射(one-to-one)的情況,map內部的實現⾃建⼀顆紅⿊樹,這顆樹具有對數據⾃動排序的功能。

⽐如⼀個班級中,每個學⽣的學號跟他的姓名就存在著⼀對⼀映射的關係。

⼆、成員函式概觀與常⽤程式寫法1. 变量声明map<string, string> mapStudent;2. 插⼊元素//⽤insert函數插⼊pairmapStudent.insert(pair<string, string>("r000", "student_zero"));//⽤"array"⽅式插⼊mapStudent["r123"] = "student_first";mapStudent["r456"] = "student_second";3. 查找出現時,它返回資料所在位置,如果沒有,返回iter與end函數返回相同iter = mapStudent.find("r123");if(iter != mapStudent.end())cout<<"Find, the value is"<<iter->second<<endl;elsecout<<"Do not Find"<<endl;4. 刪除與清空清空map中的數據可以⽤clear()函數,判定map中是否有數據可以⽤empty()函數,它返回true則說明是空map,⽽資料的刪除要⽤到erase函數,它有三個overload的函數。

[STL]map按value值查找——find_if的使用

[STL]map按value值查找——find_if的使用

[STL]map按value值查找——find_if的使⽤最近是经常使⽤stl中的map,于是就想记⼀些关于map的东西。

这⼀篇中会讲到map按照value值查找的⽅法,就是find_if函数。

⼤家都知道在map中,排序是按照key值排的,map⾃带的find⽅法也是按着key值查找的,这在某些情况下可能会遇到⼀些⿇烦。

譬如,map<int, char*> m_str中,传⼊⼀个char*需要查找在m_str中是否存在这个字符串,当然你⼤可以使⽤iterator遍历⼀些map,如果你坚持这么做,那就可以直接关闭⽹页了。

1.先来看看find_if的原型:template <class InputIterator, class Predicate>InputIterator find_if(InputIterator first, InputIterator last,Predicate pred){while (first != last && !pred(*first)) ++first;return first;}find_if是⼀个模板函数,接受两个数据类型:InputItearator迭代器,Predicate⽤于⽐较数值的函数或者函数对象(仿函数)。

find_if对迭代器要求很低,只需要它⽀持⾃增操作即可。

当前遍历到的记录符合条件与否,判断标准就是使得pred()为真。

⾄此可能还有些不是很明了,下⾯举⼏个例⼦实际操练下的它的⽤法。

注意观察第三个参数pred。

2.find_if在std::map查找时的应⽤假如我们有个map对象是这么声明的:std::map<int, std::string> mymap;mymap.insert(std::make_pair(20, "USA"));mymap.insert(std::make_pair(10, "CHINA"));mymap.insert(std::make_pair(30, "English"));mymap.insert(std::make_pair(40, "Hongkong"));插⼊值后我们想得到值为”english”的这条记录,要怎样写程序呢?下⾯是个范例参考下:#include <map>#include <string>#include <algorithm>class map_value_finder{public:map_value_finder(const std::string &cmp_string):m_s_cmp_string(cmp_string){}bool operator ()(const std::map<int, std::string>::value_type &pair){return pair.second == m_s_cmp_string;}private:const std::string &m_s_cmp_string;};int main(){std::map<int, std::string> my_map;my_map.insert(std::make_pair(10, "china"));my_map.insert(std::make_pair(20, "usa"));my_map.insert(std::make_pair(30, "english"));my_map.insert(std::make_pair(40, "hongkong"));std::map<int, std::string>::iterator it = my_map.end();it = std::find_if(my_map.begin(), my_map.end(), map_value_finder("English"));if (it == my_map.end())printf("not found\n");elseprintf("found key:%d value:%s\n", it->first, it->second.c_str());return0;}class map_finder即⽤于⽐较的函数对象,它的核⼼就是重载的()运算符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//by rainfish for(int nIndex = 0; nIndex < nSize; nIndex++)
{ Cout<<mapStudent[nIndex]<<end; } } 5. 数据的查找(包括判定这个关键字是否在map中出现) 在这里我们将体会,map在数据插入时保证有序的好处。 要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题 虽然是数据的查找,在这里将穿插着大量的map基本用法。 这里给出三种数据查找方法 第一种:用count函数来判定关键字是否出现,其缺点是无法定位数据 出现位置,由于map的特性,一对一的映射关系,就决定了count函数的 返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了 第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数 据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数 据,它返回的迭代器等于函数返回的迭代器,程序说明 #include <map> #include <string> #include <iostream> Using namespace std; Int main()
#include <iostream> Using namespace std; Int main() { Map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1, “student_one”)); mapStudent.insert(map<int, string>::value_type (2, “student_two”)); mapStudent.insert(map<int, string>::value_type (3, “student_three”)); map<int, string>::iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) { Cout<<iter->first<<” ”<<iter->second<<end; } } 第三种:用数组方式插入数据,下面举例说明 #include <map> #include <string> #include <iostream> Using namespace std;
std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关 键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的 值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一 数据的时候,在编程上提供快速通道。这里说下std map内部数据的组 织,std map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这 颗树具有对数据自动排序的功能,所以在std map内部所有的数据都是 有序的,后边我们会见识到有序的好处。 下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的 学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描 述,很明显学号用int描述,姓名用字符串描述(本篇文章中不用char *来 描述字符串,而是采用STL中string来描述),下面给出map描述代码: Map<int, string> mapStudent; 1. map的构造函数 map共提供了6个构造函数,这块涉及到内存分配器这些东西,略过不 表,在下面我们将接触到一些map的构造方法,这里要说下的就是,我 们通常用如下方法构造一个map: Map<int, string> mapStudent; 2. 数据的插入 在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数 据的方法: 第一种:用insert函数插入pair数据,下面举例说明(以下代码虽然是随 手写的,应该可以在VC和GCC下编译通过,大家可以运行下看什么效 果,在VC下请加入这条语句,屏蔽4786警告 #pragma warning (disable:4786) ) #include <map>
Int main() { Map<int, string> mapStudent; mapStudent[1] = “student_one”; mapStudent[2] = “student_two”; mapStudent[3] = “student_three”; map<int, string>::iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) { cout<<iter->first<<” ”<<iter->second<<end; } } 以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当 然了第一种和第二种在效果上是完成一样的,用insert函数插入数据, 在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关 键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它 可以覆盖以前该关键字对应的值,用程序说明 mapStudent.insert(map<int, string>::value_type (1, “student_one”)); mapStudent.insert(map<int, string>::value_type (1, “student_two”)); 上面这两条语句执行后,map中1这个关键字对应的值 是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知 道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功, 程序如下 Pair<map<int, string>::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(map<int, string>::value_type (1,
for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++) { Cout<<iter->first<<” ”<<iter->second<<end; } } 第三种:用数组方式,程序说明如下 #include <map> #include <string> #include <iostream> Using namespace std; Int main() { Map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1, “student_one”)); mapStudent.insert(pair<int, string>(2, “student_two”)); mapStudent.insert(pair<int, string>(3, “student_three”)); int nSize = mapStudent.size() //此处有误,应该是 for(int nIndex = 1; nIndex <= nSize; nIndex++)
{ Cout<<”Insert Failure”<<endl; } Insert_Pair = mapStudent.insert(pair<int, string>(1, “student_two”)); If(Insert_Pair.second == true) { Cout<<”Insert Successfully”<<endl; } Else { Cout<<”Insert Failure”<<endl; } map<int, string>::iterator iter; for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) { Cout<<iter->first<<” ”<<iter->second<<end; } }
“student_one”)); 我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回 的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true 的,否则为false。 下面给出完成代码,演示插入成功与否问题 #include <map> #include <string> #include <iostream> Using namespace std; Int main() { Map<int, string> mapStudent; Pair<map<int, string>::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(pair<int, string>(1, “student_one”)); If(Insert_Pair.second == true) { Cout<<”Insert Successfully”<<endl; } Else
在往map里面插入了数据,我们怎么知道当前已经插入了多少数据呢, 可以用size函数,用法如下: Int nSize = mapStudent.size(); 4. 数据的遍历 这里也提供三种方法,对map进行遍历 第一种:应用前向迭代器,上面举例程序中到处都是了,略过不表 第二种:应用反相迭代器,下面举例说明,要体会效果,请自个动手运 行程序 #include <map> #include <string> #include <iostream> Using namespace std; Int main() { Map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1, “student_one”)); mapStudent.insert(pair<int, string>(2, “student_two”)); mapStudent.insert(pair<int, string>(3, “student_three”)); map<int, string>::reverse_iterator iter;
相关文档
最新文档