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(1,"Hello,"));
    amap.insert(make_pair(4,"Bryce."));
    amap.insert(make_pair(2,"I "));
    amap.insert(make_pair(3,"am "));
    string output = "";
    for(map<int, string>::iterator it = amap.begin(); it!=amap.end(); ++it){
        output += it->second;
    }
    cout<< output<<endl;

    return 0;
}

   再次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 = 0; itv != sz; ++itv){
            if(map.count(num[itv]) == 0){
                map.insert(pair<int,int>(num[itv],1));
            }else{
                int count = map[num[itv]];
                map.erase(num[itv]);  //注意此处要先删除,再插入新元素,如果直接调用insert元素不会更新
                map.insert(pair<int,int>(num[itv],count+1));
            }
        }
        int majority=0;
        int majKey = -1;
        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[10] = {1,1,1,1,1,3,4,5,3,3};
    cout<< majorityElement(num,10)<<endl;
    return 0;
}

  打印输出出现最多次的元素1。

  对于特定问题用好map将节约很多时间。

时间: 2024-10-13 14:18:10

C++回顾map的用法的相关文章

STL中map的用法

map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一

set/multiset和map/multimap用法小结

二叉搜索树是ACM中经常需要用到的数据结构,熟练掌握map和set的用法很关键,现对其做一个简单的总结. 主要的功能有:插入元素,查找元素,删除,遍历/反向遍历. 现以map为例说明用法,multimap是可以插入重复键值的元素的map. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmat

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

  array.forEach(callback[, thisObject]); 下面是参数的详细信息: 1. callback : 函数测试数组的每个元素. 2.thisObject : 对象作为该执行回调时使用. forEach是ECMA5中Array新方法中最基本的一个,就是遍历,循环. Array在ES5新增的方法中,参数都是function类型,默认有传参,forEach方法中的function回调支持3个参数,第1个是遍历的数组内容:第2个是对应的数组索引,第3个是数组本身. [].

STL 之 map的用法

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一

C++ map 的用法归纳2

[尊重原著: http://blog.csdn.net/zcf1002797280/article/details/7847819] Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数:map<string , int >mapstring; map<int ,string >mapint;map<sring, char>mapstring; map<

C++11中map的用法

最全的c++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. 

bobo jquery筛选数组之grep、each、inArray、map的用法及遍历json对象 [转]

纯粹记录下几种用法: jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.grep(array,function(value){ return value > 5;//筛选出大于5的 }); for(var i=0;i<filterarray.length;i++){ alert(filterarray[i]); } for (key in filtera

C语言 &#183; C++中map的用法详解

转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义   (1) map<string,   int>   Map;     (2) 或者是:typedef   map<string,int>   Mymap;                       Mymap   Map; 二.插入数据  插入数据之前先说一下pair 和 make_pair 的用法pair是一个结构体,有first和second 两个

map的用法

Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数:   map<string , int >mapstring;         map<int ,string >mapint;   map<sring, char>mapstring;         map< char ,string>mapchar;   map<char ,i