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的用法的更多相关文章

  1. 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 ...

  2. STL中map的用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  3. C++11中map的用法

    最全的c++map的用法 1. map最基本的构造函数:map<string ,int>mapstring; map<int,string >mapint;map<sri ...

  4. entrySet用法 以及遍历map的用法

    entrySet用法 以及遍历map的用法   keySet是键的集合,Set里面的类型即key的类型entrySet是 键-值 对的集合,Set里面的类型是Map.Entry   1.keySet( ...

  5. python map 常见用法

    python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...

  6. 8 map的用法

    what's map go里面的map和python字典差不多. 类似其他语言中的哈希表或者字典,以key-value的形式存储的数据 key必须是支持==或者!=比较运算的类型,不可以是函数.map ...

  7. forEach、for+i、map的用法及区别

      array.forEach(callback[, thisObject]); 下面是参数的详细信息: 1. callback : 函数测试数组的每个元素. 2.thisObject : 对象作为该 ...

  8. set/multiset和map/multimap用法小结

    二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 插入,删除和查找操作的时间都和树的高 ...

  9. STL 之 map的用法

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

随机推荐

  1. SQL初级语法 [查询: SELECT]

    SQL查询: SELECT 普通查询: SELECT "栏位名" FROM "表格名" DISTINCT 查询:(去掉重复) SELECT DISTINCT & ...

  2. MFC中无边框窗口的拖动

      void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN, HTCAPTI ...

  3. web前端之性能优化

    作为一个前端工作人员,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...

  4. EntityFramework+MySql 笔记2

    话说刚刚配置好环境,刚刚写了几行代码,迫不及待地运行,duang! 踏进了第一个坑 看代码 static void Main(string[] args) { Database.SetInitiali ...

  5. Android菜鸟成长记13 -- 初识application

    二.Application 简介 Application 类是用来维护应用程序全局状态.你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> ...

  6. layer弹出层不居中解决方案

    layer弹出层不居中解决方案 代码头中加入以下代码即可 <!doctype html>

  7. Altium Designer XX 重新定义板框形状和大小的方法

    Altium Designer15 重新定义板框形状和大小的方法:重新定义板框形状和大小的方法.很简单,点击数字键"1",就会看到板框界面变绿了这时候你在去点击菜单栏里的Desig ...

  8. 2016国内最值得期待的响应式前端框架pintuer(拼图)--http://www.pintuer.com

    近期,需要将项目从pc端的应用扩展到移动端. 当然移动框架的第一选择必然是bootstrap,但是bootstrap作为移动端明显过于死板,而且作为国外的产品,对于国内的应用明显水土不服.框架里总有那 ...

  9. C. Shaass and Lights 组合数学

    http://codeforces.com/contest/294/problem/C 把那个数组n分段了,那么有两类. 1.开头和端点那些,就是只有一端在开始的,这个时候,要开完这些灯,只能循序渐进 ...

  10. SpringMVC接收页面表单参数

    一个普通的表单. 表单的代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8&q ...