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中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
随机推荐
- Python实现插件机制——自动import一个目录下的所有.py文件
假设有这样一个目录结构: /src main.py /plugins __init__.py a.py ...
- PHP判断请求是否是ajax请求
首先看一下框架里面是怎样判断的.ThinkPHP:define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && str ...
- Linux_10------Linux之shell编程------变量
.-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...
- CSS的两大重点
一.属性:通过属性的复杂叠加才能做出漂亮的网页 二.选择器:通过选择器找到对应的标签设置样式,选择器的作用是:选择对应的标签,为之添加样式 1>标签选择器:根据标签签名找到标签 div{ ...
- hbase scan 的例子
/** * Created by han on 2016/1/28. */ import org.apache.hadoop.conf.Configuration; import org.apache ...
- asp.net 琐记
Page的AutoEventWireup作用是是否引发PreInit Load PreRender Unload几个页面处理流程事件 和控件的事件处理函数无关
- Winfrom实现圆角设计
主要代码 public partial class Form1 : Form { public Form1() { InitializeComp ...
- Socket accept failed
启动tomcat显示如下错误: java.net.SocketException: select failed at java.net.PlainSocketImpl.socketAccept(Nat ...
- ssh批量互信脚本
#!/bin/sh#date:2016-05-17#wrinte:lxh cat ./iplist.txt |grep -v "^$" >iplist.tmpiplist=. ...
- JS-小球碰撞反弹
类似于屏保的一种动画,当小球碰到边框时,发生反弹,并且变化颜色. <!DOCTYPE html><html lang="en"><head> ...