C++回顾map的用法
map<T, T>是C++的STL中存储key-value键值对数据结构的最基础的模板类,相对于multimap可以重复的key值,map的key是非重复的。
C++的reference这样说明的:
std::map is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function Compare. Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as red-black trees.
首先map里的数据是以key根据Compare函数排序的(sorted),可以用标准库提供的迭代器实现元素的有序遍历。下面的代码运行后输出"Hello, I am Bryce";
#include<iostream>
#include<map>
using namespace std; int main(){
map<int, string> amap; //contains string "Hello,I am Bryce."
amap.insert(make_pair(,"Hello,"));
amap.insert(make_pair(,"Bryce."));
amap.insert(make_pair(,"I "));
amap.insert(make_pair(,"am "));
string output = "";
for(map<int, string>::iterator it = amap.begin(); it!=amap.end(); ++it){
output += it->second;
}
cout<< output<<endl; return ;
}
再次map底层是由红黑树实现,红黑树请看July的博客 教你透彻了解红黑树。所以元素操作插入元素(insert),删除元素(erase),查找元素(find),lower_bound(value), upper_bound(value)等成员函数的时间复杂皆是O(ln n)。
用一个应用实例说明map的使用(可以达到对数级复杂度哦):查找给出数组里的出现次数最多的元素。在数组元素特征可以预知而且元素是整型或可以转化为整型并且元素的范围有限(怎么这么多限定条件啊,对,谁让你用hash的)的情况下,当然用自建Hash映射效率最高,但是在一般情况下,数组元素都是随机的,用C++标准库提供的map是不二选择(如果你用C++编程的话)。贴代码,注意细节
#include<iostream>
#include<map> using namespace std;
int majorityElement(int num[], int sz) {
map<int,int> map;
for(int itv = ; itv != sz; ++itv){
if(map.count(num[itv]) == ){
map.insert(pair<int,int>(num[itv],));
}else{
int count = map[num[itv]];
map.erase(num[itv]); //注意此处要先删除,再插入新元素,如果直接调用insert元素不会更新
map.insert(pair<int,int>(num[itv],count+));
}
}
int majority=;
int majKey = -;
for(std::map<int,int>::iterator it = map.begin(); it != map.end(); ++it){
//cout<<it->first<<endl;
if(it->second > majority ){
majKey = it->first;
majority = it->second;
}
}
return majKey;
} int main(){
int num[] = {,,,,,,,,,};
cout<< majorityElement(num,)<<endl;
return ;
}
打印输出出现最多次的元素1。
对于特定问题用好map将节约很多时间。
C++回顾map的用法的更多相关文章
- c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏
c++map的用法 分类: 资料 2012-11-14 21:26 10573人阅读 评论(0) 收藏 举报 最全的c++map的用法 此文是复制来的0.0 1. map最基本的构造函数: map&l ...
- STL中map的用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
- C++11中map的用法
最全的c++map的用法 1. map最基本的构造函数:map<string ,int>mapstring; map<int,string >mapint;map<sri ...
- entrySet用法 以及遍历map的用法
entrySet用法 以及遍历map的用法 keySet是键的集合,Set里面的类型即key的类型entrySet是 键-值 对的集合,Set里面的类型是Map.Entry 1.keySet( ...
- python map 常见用法
python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...
- 8 map的用法
what's map go里面的map和python字典差不多. 类似其他语言中的哈希表或者字典,以key-value的形式存储的数据 key必须是支持==或者!=比较运算的类型,不可以是函数.map ...
- forEach、for+i、map的用法及区别
array.forEach(callback[, thisObject]); 下面是参数的详细信息: 1. callback : 函数测试数组的每个元素. 2.thisObject : 对象作为该 ...
- set/multiset和map/multimap用法小结
二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 插入,删除和查找操作的时间都和树的高 ...
- STL 之 map的用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
随机推荐
- 利用Aspose.Pdf将扫描的电子书修改为适合在kindle上查看
很多扫描版的电子书,留有很大的页边距,大屏的设备看起来没有啥影响,可是在kindle上看起来就麻烦了,放大操作简直就没法用,最好能把留白去掉. 将pdf文件转换为图片这个看看 例子里的 JpegDev ...
- 《IT蓝豹》PlayNewsStandDemo资讯类新闻客户端框架
PlayNewsStandDemo资讯类新闻客户端框架,支持tab滑动切换,当切换到最左边或者最后边的时候停止滑动 本例子切换tab的效果根据AccelerateDecelerateInterpola ...
- Python+Google Geocoding
本文主要介绍使用Python调用Google Geocoding API进行地址到地理坐标的转换. Google Geocoding参考https://developers.google.com/ma ...
- spring mvc 定时器
1.下载quartz-all-1.7.3.jar包 a.在Spring配置和Quartz集成内容时,有两点需要注意 b.在<Beans>中不能够设置default-lazy-init=&q ...
- BZOJ1093 [ZJOI2007]最大半连通子图
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- linux随笔2
---恢复内容开始--- 2016,12,20 在linux里面不写这些扩展名,也是可以的,但是写这些扩展名是为了个管理员写的,好区分,但是linux本身不依靠扩展名来区分文件类型 ~~~~~~~~~ ...
- oracle常用命令大全及心得
学习时整理的 Oracle 1.set linesize 100; 设置长度2.set pagesize 30; 设置每页显示数目3.em a.sql 打开记事本 4.@ a 执行文件a中的代码,可指 ...
- UITextView 显示不全的问题
//设置UITextView的内边距 textView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);
- uvm - dut
module dut(clk, rst_n, rxd, rx_dv, txd, tx_en); input clk; input rst_n; :] rxd; input rx_dv; :] txd; ...
- em 换算
1 ÷ 父元素的font-size × 需要转换的像素值 = em值 http://www.w3cplus.com/css/px-to-em