C++ STL 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 ,int>mapchar; map<int ,char >mapint;

2. map添加数据;
map<int ,string> maplive;

1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3,
maplive[112]="April";//map中最简单最常用的插入添加!

3,map中元素的查找:

find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not
find 112"<<endl;
else cout<<"wo find 112"<<endl;

4,map中元素的删除:
如果删除112;
map<int ,string
>::iterator
l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we
do not find 112"<<endl;
else maplive.erase(l_it); //delete 112;

5.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数

6.map的基本操作函数

C++ Maps是一种关联式容器,包含“关键字/值”对

  begin() 返回指向map头部的迭代器

  clear() 删除所有元素

  count() 返回指定元素出现的次数

  empty() 如果map为空则返回true

  end() 返回指向map末尾的迭代器

  equal_range() 返回特殊条目的迭代器对

  erase() 删除一个元素

  find() 查找一个元素

  get_allocator() 返回map的配置器

  insert() 插入元素

  key_comp() 返回比较元素key的函数

  lower_bound() 返回键值>=给定元素的第一个位置

  max_size() 返回可以容纳的最大元素个数

  rbegin() 返回一个指向map尾部的逆向迭代器

  rend() 返回一个指向map头部的逆向迭代器

  size() 返回map中元素的个数

  swap() 交换两个map

  upper_bound() 返回键值>给定元素的第一个位置

  value_comp() 返回比较元素value的函数

//使用map的Demo

 1 void CLoadDllDemoDlg::OnBnClickedButton17()
 2 {//STL MAP
 3     /*定义CString为key,int值为value的map*/
 4     std::map<CString, int>mapDemo;
 5
 6     for(int i = 0; i < 10; i++)
 7     {//添加数据
 8         CString strKey;
 9         strKey.Format(_T("key:%d"), i);
10         /*方法1*/
11         mapDemo.insert(std::make_pair<CString, int>(strKey, i));
12         /*方法2*/
13         //mapDemo.insert(map<CString, int>::value_type (strKey, i));
14     }
15
16     /*查找数据*/
17     CString strFindKey;
18     std::map<CString, int>::iterator itFind;
19     for(int p = 0; p < 15; p++)
20     {
21         strFindKey.Format(_T("key:%d"), p);
22         itFind = mapDemo.find(strFindKey);
23         if(itFind != mapDemo.end())
24         {//找到数据
25             int nVal = itFind->second;
26             if(9 == nVal)
27             {//删除该条数据
28                 mapDemo.erase(itFind);
29             }
30         }
31     }
32 }
时间: 2024-10-23 12:41:58

C++ STL map使用的相关文章

stl::map之const函数访问

如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const { if (_map_name_value.find(name) != _map_name_value.end()) { return _map_name_value[name]; } return ""; } 上面的代码会报错:error C2678: 二进制“[”: 没有找到接受“c

hdu 4941 Magical Forest(STL map &amp; 结构体运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 220    Accepted Submission(s): 105 Problem Description There is a forest c

(转载)STL map与Boost unordered_map的比较

原链接:传送门 今天看到 boost::unordered_map,它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中.所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的.顺序就是按照operator< 定义的大小排序.而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同.所以,对unordered_map进行遍历,结果是无序的. 用法的区别就是

ZOJ1109_Language of FatMouse(STL/map)

解题报告 题意: 略. 思路: map应用. #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <map> using namespace std; map<string,stri

POJ训练计划3096_Surprising Strings(STL/map)

解题报告 题目传送门 题意: 给一个字符串,要求,对于这个字符串空隔为k取字符对(k=0,1,2,3,4...)要求在相同的空隔取对过程汇总,整个字符串中没有一个相同字符对如: ZGBZ: 间隔为0的字符对有: ZG.GB.BZ,三个均不相同 间隔为1的字符对有: ZG. GZ,均不相同 间隔为2的字符对有: ZZ 仅有一个,不必比较. 这种字符串定义为"surprising". 之后按照格式输出. 思路: map暴力. #include <iostream> #inclu

支持泛型AVL Tree的简单实现,并和STL map比较了插入,删除,查找的性能

1.问题描述: 1)AVL tree是一种自平衡树.它通过左右子树的高度差来控制树的平衡,当高度差是不大于1的时候,认为树是平衡的.树的平衡保证了树在极端情况下 (输入序列不够随机)的性能.很显然当左右子树高度平衡,保证了任何插入,删除,查找操作平均性能呢个,当不平衡时(有的子树很高),当 要操作的元素在这个子树时,性能会很差: 2)AVL tree 和Red black tree 都是一种平衡树,它的操作的时间复杂度是:O(lgN) ,N是树的节点的数目: 3)本文实现了AVL Tree, 并

泛型Binary Search Tree实现,And和STL map比较的经营业绩

问题叙述性说明: 1.binary search tree它是一种二进制树的.对于key值.比当前节点左孩子少大于右子. 2.binary search tree不是自平衡树.所以,当插入数据不是非常随机时候,性能会接近O(N).N是树中节点数目; 3.理想状态下.时间复杂度是O(lgN), N是树中节点的数目: 4.以下给出一个简单的实现,并比較其和STL map的性能.一样的操作,大约耗时为STL map 的2/3. 代码例如以下: #ifndef _BINARY_SEARCH_TREE_H

hdu4941 Magical Forest (stl map)

2014多校7最水的题   Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 253    Accepted Submission(s): 120 Problem Description There is a forest can be seen as N * M gri

扩展封装暴雪哈希算法(blizard hash algorithm),并与STL map进行操作性能上的比较

问题描述: 1.blizard hash algorithm 是众所周知的算法,关于它极小的碰撞概率和实现的简洁性一直为热爱技术的朋友津津乐道: 2.blizard hash algorithm 有个致命的问题就是它的实现受制于一个固定的(预先开辟的buffer)的限制,暴雪给出的是1024,也即当hash table 的填充的元素(key value pair)查过1024时,就没办法再往里面进行key value 对填充,这极大的限制了它的使用.在实现的应用,我们经常会向hash table

[CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map

13.2 Compare and contrast a hash table and an STL map. How is a hash table implemented? If the number of inputs is small, which data structure options can be used instead of a hash table? 这道题让我们比较哈希表和STL中的map数据结构,在遇到这道题之前,我一直以为map就是c++中的哈希表呢,原来是不同的啊-