C++ Maps MultiMaps

C++ Maps & MultiMaps
C++ Maps & MultiMaps

C++ Maps
是一种关联式容器,包含“关键字/值”对。
C++ Multimapsmaps很相似,但是MultiMaps允许重复的元素。
1.begin() 返回指向map头部的迭代器
2.clear() 删除所有元素
3.count() 返回指定元素出现的次数
   语法:
   size_type count( const KEY_TYPE &key );
   //返回map中键值等于key的元素的个数
4.empty() 如果map为空则返回true
5.end() 返回指向map末尾的迭代器
6.equal_range() 返回特殊条目的迭代器对
   语法:
   pair equal_range( const KEY_TYPE &key );
   返回两个迭代器,指向第一个键值为key的元素和指向最后一个键值为key的元素
7.erase() 删除一个元素
   语法:
   void erase( iterator i ); //删除i元素
   void erase( iterator start, iterator end ); //删除从start开始到end(不包括end)结束的元素
   size_type erase( const key_type &key );
   //删除等于key值的所有元素(返回被删除的元素的个数)
8.find() 查找一个元素
   语法:
iterator find( const key_type &key );
   查找等于key值的元素,并返回指向该元素的迭代器;
   //如果没有找到,返回指向集合最后一个元素的迭代器.
9.get_allocator() 返回map的配置器
10.insert() 插入元素
   语法:
   iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
   //插入valpos的后面,然后返回一个指向这个元素的迭代器
   void insert( input_iterator start, input_iterator end );
   //插入startend的元素到map
   pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );
   //只有在val不存在时插入val。返回指向被插入元素的迭代器和描述是否插入的bool
11.key_comp() 返回比较元素key的函数
   语法:
   key_compare key_comp();
   //返回一个用于元素间值比较的函数对象
12.lower_bound() 返回键值>=给定元素的第一个位置
   语法:
   iterator lower_bound( const key_type &key );
   //返回一个指向大于或者等于key值的第一个元素的迭代器
13.max_size() 返回可以容纳的最大元素个数
14.rbegin() 返回一个指向map尾部的逆向迭代器
15.rend() 返回一个指向map头部的逆向迭代器
16.size() 返回map中元素的个数
17.swap() 交换两个map
   语法:
   void swap( map &obj );
   //swap()交换obj和现map中的元素
18.upper_bound() 返回键值>给定元素的第一个位置
   语法:
   iterator upwer_bound( const key_type &key );
   //返回一个指向大于key值的第一个元素的迭代器
19.value_comp() 返回比较元素value的函数
   语法:
   value_compare value_comp();
//返回一个用于比较元素value的函数

MapSTL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,map内部的实现自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。

下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,很明显学号用int描述,姓名用字符串(string)描述。

下面给出map描述代码:

1.声明方式:     

1       Map<intstring> mapStudent;

2.数据的插入

第一种:用insert函数插入pair数据

1       Map<intstring> mapStudent; 
2       mapStudent.insert(pair<intstring>(1, “student_one”)); 

      第二种:用insert函数插入value_type数据

1       Map<intstring> mapStudent; 
2       mapStudent.insert(map<intstring>::value_type (1, “student_one”)); 

     第三种:用数组方式插入数据

1       Map<intstring> mapStudent; 
2       mapStudent[1= “student_one”; 
3       mapStudent[2= “student_two”; 

    3. map的大小

1 Int nSize = mapStudent.size(); 

    4. 数据的遍历

第一种:应用前向迭代器

1       map<intstring>::iterator iter; 
2       for(iter = mapStudent.begin(); iter !=   mapStudent.end(); iter++
3       Cout<<iter->first<<” ”<<iter->second<<end; 

     第二种:应用反相迭代器   

1       map<intstring>::reverse_iterator iter; 
2       for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++
3       Cout<<iter->first<<” ”<<iter->second<<end;

第三种:用数组方式     

1       int nSize = mapStudent.size() 
2       for(int nIndex = 1; nIndex <= nSize; nIndex++
3       Cout<<mapStudent[nIndex]<<end;

5. 数据的查找(包括判定这个关键字是否在map中出现)

第一种:用count函数来判定关键字是否出现,但是无法定位数据出现位置

第二种:用find函数来定位数据出现位置它返回的一个迭代器,

当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器

 1 int main() 
 2 
 3       Map<intstring> mapStudent; 
 4       mapStudent.insert(pair<intstring>(1, “student_one”)); 
 5       mapStudent.insert(pair<intstring>(2, “student_two”)); 
 6       mapStudent.insert(pair<intstring>(3, “student_three”)); 
 7       map<intstring>::iterator iter; 
 8       iter = mapStudent.find(1); 
 9       if(iter != mapStudent.end()) 
10       { 
11          Cout<<”Find, the value is ”<<iter->second<<endl; 
12       } 
13       Else 
14       { 
15          Cout<<”Do not Find”<<endl; 
16       } 
17 

第三种:这个方法用来判定数据是否出现

Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)

Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)

例如:map中已经插入了1234的话,如果lower_bound(2)的话,返回的2,而upper-bound2)的话,返回的就是3

Equal_range函数返回一个pairpair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字,程序说明

1 mapPair = mapStudent.equal_range(2); 
2 if(mapPair.first == mapPair.second) 
3 cout<<”Do not Find”<<endl; 

6. 数据的清空与判空

清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明是空map

7. 数据的删除

这里要用到erase函数,它有三个重载了的函数

迭代器删除   

1    iter = mapStudent.find(1); 
2    mapStudent.erase(iter);

用关键字删除  

1 Int n = mapStudent.erase(1);//如果删除了会返回1,否则返回0

用迭代器,成片的删除

1 mapStudent.earse(mapStudent.begin(),  mapStudent.end()); 
2 //成片删除要注意的是,也是STL的特性,删除区间是一个前闭后开的集合
3 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语单词词干化表

博客&#xff1a;https://blog.csdn.net/potato012345/article/details/78091939 下载地址&#xff1a;https://github.com/Zhangtd/MorTransformation

c++ List(双向链表)

c List(双向链表)List(双向链表)介绍: List是一个线性链表结构&#xff0c;它的数据由若干个节点构成&#xff0c;每一个节点都包括一个信息块&#xff08;即实际存储的数据&#xff09;、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩&#x…

Arrays.deepToString的使用

今天看别人的代码引用了这个函数&#xff0c;发现原来遍历数组(非List&#xff0c;例如&#xff1a;int [][] 类型等)可以直接调用Arrays.deepToString(数组名)可以直接输出结果&#xff0c;以前还傻不啦叽的的转换成List数组或者是for循环遍历。 Integer[][] allMovieComment…

C++ Vector(向量容器)

Vector介绍C Vector&#xff08;向量容器&#xff09; 是一个线性顺序结构。相当于数组&#xff0c;但其大小可以不预先指定&#xff0c;并且自动扩展。它可以像数组一样被操作&#xff0c;由于它的特性我们完全可以将vector 看作动态数组。 在创建一个vector 后&#xff0c;它…

出现特殊分隔符无法分隔解决方案

今天处理文本数据时候遇到这种文本用空格和tab正则匹配没有作用&#xff0c;后来问了同事发现可以用“\\uf8f5”去匹配。 待处理文本&#xff1a; A abbr.安  A-10IInone.美空军主力近距离空中支援攻击机&#xff0c;无愧为“坦克杀手”。 A-12none.夭折的美海…

java英文单词单复数转换

package steam;import java.util.*; import java.util.regex.*; /*** * 单复数转换类* 2018年12月30日*/public class Inflector {private static final Pattern UNDERSCORE_PATTERN_1 Pattern.compile("([A-Z])([A-Z][a-z])");private static final Pattern UNDERS…

最全英语单词下载地址

这两天搜集英文单词做词干化处理&#xff0c;虽说standford-NLP可以处理&#xff0c;但是效率不高&#xff0c;自己动手找单词做映射表&#xff0c;找单词真的痛苦&#xff01;&#xff01;&#xff01;放出以下地址最为保存和分享 github&#xff1a; https://github.com/dw…

NLP英文缩写词性含义

1. CC Coordinating conjunction 连接词 2. CD Cardinal number 基数词 3. DT Determiner 限定词&#xff08;如this,that,these,those,such&#xff0c;不定限定词&#xff1a;no,some,any,each,every,enough,either,neither,all,both,half,sever…

redis通过expire设置存活期注意问题

今天老大检查之前所做的项目发现项目过期数据仍然残留并没有删除&#xff0c;本以为自己设置了存活期就不用管数据了会自动删除掉&#xff0c;啊&#xff0c;果然自己太马虎了&#xff0c;如果是传统的kv类型&#xff0c;通过expire(key&#xff0c;alive_time)没有错误&#x…

次幂函数取模算法

次幂函数取模算法 高次幂函数取模算法 在平常的工作学习中&#xff0c;我们经常需要用到求取一个数字或者幂运算的余数&#xff0c;尤其在密码学中最为常用的RSA算法就经常要用到这种运算&#xff0c;我们称之为高次幂函数的取模运算。 在本篇文章中&#xff0c;将会首先介绍运…

【转载保存】接口压力测试安装与使用

https://blog.csdn.net/qq_26525215/article/details/79182674

mysql日期格式转换

select * from news where DATE_FORMAT(news_time, %Y-%m-%d %k:%i:%s) < " "" curDate "

java单例模式双重检查

public class Singleton {private static volatile Singleton singleton;private Singleton() {}public static Singleton getInstance() {if (singleton null) {synchronized (Singleton.class) {if (singleton null) {singleton new Singleton();}}}return singleton;} }

mysql 常用操作

mysql 常用操作&#xff08;整理&#xff09; 标签&#xff1a; MYSQL常用操作 2013-07-22 16:37 10846人阅读 评论(0) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; MYSQL 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 目录(?)[]…

协同过滤算法UserCF和ItemCF优缺点对比

UserCF&#xff1a; 性能&#xff1a;适用于用户较少的场合&#xff0c;如果用户很多&#xff0c;计算用户相似度矩阵代价很大。领域&#xff1a;时效性较强&#xff0c;用户个性化兴趣不太明显的领域。实时性&#xff1a;用户有新行为&#xff0c;不一定造成推荐结果的立即变…

deque

STL之deque容器详解Deque 容器 deque容器是C标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似&#xff0c;支持随机访问和快速插入删除&#xff0c;它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是&#xff0c;deque还支持从…

【转载保存】MySQL时间、字符串、时间戳互相转换

时间转字符串 select date_format(now(), ‘%Y-%m-%d %H:%i:%s’); 结果&#xff1a;2018-05-02 20:24:10 时间转时间戳 select unix_timestamp(now()); 结果&#xff1a;1525263383 字符串转时间 select str_to_date(‘2018-05-02’, ‘%Y-%m-%d %H’); 结果&#xff1a;20…

RMQ算法,求区间最值

poj 3264 Balanced Lineup 2016-07-27 11:15 49人阅读 评论(0) 收藏 举报分类&#xff1a;RMQ(Range MinimumMaximum Quer)&#xff08;4&#xff09; Balanced LineupTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 45854 Accepted: 21536Case Time Limit: 2000M…

【转载】向量空间模型VSM及余弦计算

向量空间模型VSM及余弦计算 向量空间模型的基本思想是把文档简化为以特征项&#xff08;关键词&#xff09;的权重为分量的N维向量表示。 这个模型假设词与词间不相关&#xff08;这个前提造成这个模型无法进行语义相关的判断&#xff0c;向量空间模型的缺点在于关键词之间的…

机器学习入门学习视频和书籍(笔记保存)

我娜姐推荐的资料和我要看的资料记录下&#xff1a; 吴恩达151课时:https://study.163.com/course/courseLearn.htm?courseId1004570029#/learn/video?lessonId1049052745&courseId1004570029机器学习书籍&#xff1a;《Machine Learning in Action》,Peter Harington&a…