std::map用法总结
给出了map的基本用法如插入、查找、删除、遍历等等,同时告诉你如何实现双键map,包括
(1) 只有两个键都匹配才命中目标
(2) 两个键中任意一个匹配就命中目标
可以扩展到多键
(一) 介绍特点:1.map将Key的object和T的Object绑定到一起,因此是一种Pair Associative Container, 表示其value type为 pair。2.它同时也是Unique Associative Container,表示没有两个元素具有相同的Key。3.它还是一种Sorted Associative Container,因此第三个参数只能是less,greater之类的functor, 相比较而言, hash table是 equal_to, not_equal_to之类的functor。
(二) 基本用法通过以下范例,可以看出map的一些基本用法: 插入、查找、删除、遍历等等。/* 这个是MS的bug,看着心烦,屏蔽掉警告 */#if defined (_MSC_VER)#pragma warning(disable: 4786)#endif#include <iostream>#include <map>#include <algorithm>int main(int argc, char *argv[]){ /* define a map */ std::map _map; /* insert */ _map.insert( std::map::value_type(0, 32.8) ); _map.insert( std::map::value_type(1, 33.2) ); _map.insert( std::map::value_type(2, 35.8) ); _map.insert( std::map::value_type(3, 36.4) ); _map.insert( std::map::value_type(4, 37.8) ); _map.insert( std::map::value_type(5, 35.8) ); /* 这个是常用的一种map赋值方法 */ _map[7] = 245.3; /* find by key */ std::map::iterator itr; itr = _map.find(4); if( itr != _map.end() ) { std::cout << "Item:" << itr->first << " found, content: " << itr->second << std::endl; } std::cout << std::endl; /* delete item from map */ if( itr != _map.end() ) { _map.erase(itr); } /* travel through a map */ std::map::iterator itr1 = _map.begin(); for( ; itr1 != _map.end(); ++itr1 ) { std::cout << "Item:" << itr1->first << ", content: " << itr1->second << std::endl; } std::cout << std::endl; /* empty a map */ _map.clear(); return 0;}
(三) 当Key是结构时该如何定义结构比如 Key是结构MyStruct类型, 此时map可以定义如下:std::map > _map;其中Compare 缺省是std::less,这里可以不写,自定义的结构必须实现Compare指定的比较操作,因此自定义结构MyStruct必须按照如下写法:
struct MyStruct{ int key; bool operator < ( const MyStruct rhs) const { return key < rhs.key; }};当然也可以实现全局operator <bool operator < ( const MyStruct lhs, const MyStruct rhs) { return lhs.key < rhs.key;}
另外,当Compare 是std::greater时,需要实现 operator >
(四) 如何实现两个Key的map, 只有两个Key都匹配才命中目标可以定义结构MyStruct如下:struct MyStruct{ int key1; double key2 bool operator < ( const MyStruct rhs) const { /* 两个key必须都匹配才命中 */ return ( key1 < rhs.key1 || key2 < rhs.key2 ); }};
(五) 如何实现两个Key的map, 两个Key中任意一个匹配就命中目标可以定义结构MyStruct如下:struct MyStruct{ int key1; double key2 bool operator < ( const MyStruct rhs) const { /* 两个key任意一个匹配就命中 */ return ( ( key1 < rhs.key1 || (key1 > rhs.key1 && key2 < rhs.key2 ) ) && ( key2 < rhs.key2 ) ); }};
(六) 如果被存储的T允许重复,可用multimap
(七) 如果Key本身就是需要被存储的T, 只要将map换成set就好了
转载于:https://www.cnblogs.com/shenyanyun/archive/2010/05/19/1739308.html
std::map用法总结相关推荐
- std::map用法
std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map ...
- c++中std::map简介及find用法
目录 一.map简介 二.map的功能 1.快速插入Key -Value 记录. 2.快速删除记录 3.根据Key 修改value记录. 4.遍历所有记录. 三.使用map 四. map的构造函数 五 ...
- std::map char*做key
用 char*作为std::map中的key 网上的用法: 声明map时需要添加一个cmp比较函数,不然map在比较时,使用char *的指针进行比较,而不是比较char字符串. [cpp] view ...
- C++ Map用法详解
用法汇总 insert 插入一个元素 size 获得map中元素的个数 max_size 获得map所能容纳的元素个数 count 判断是否存在某个key,存在为返回1 find 查找某个key er ...
- 使用map的find头文件_C++ map用法
C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在 map 中出现一次:第二个称之为该关键字的对应值.在一些程序中 ...
- Go程序:演示map用法
Go程序:演示map用法 在C++/Java中,map一般都以库的方式提供,比如在C++中是STL的std::map<>,在C#中是 Dictionary<>,在Java中是H ...
- C++ map用法总结(整理)
1,map简介 map是STL的一个关联容器,它提供一对一的hash. 第一个可以称为关键字(key),每个关键字只能在map中出现一次: 第二个可能称为该关键字的值(value): map以模板(泛 ...
- 转: std::string用法详解
原文地址为: 转: std::string用法详解 C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...
- 关于STL中的map用法
STL中map用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力, ...
最新文章
- 1357篇ECCV 2020论文打包下载!奖项公布:李飞飞高徒获最佳论文奖
- org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
- R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)
- verilog编译指令
- 面试:说说Java 中堆和栈的区别?
- hive 配置参数说明
- tensorflow 之 最近用到的几个小操作tf.reshape,tf.convert_to_tensor,tf.where
- silverlight中数据绑定讲解
- checkbox ajax 不选中的值,php – 无法通过ajax传递checkbox的值
- 人工智能的炒作_为什么人工智能被过度炒作?
- 川大 计算机 博士 毕业要求,川大酝酿新规:博士生毕业不能直接当讲师
- Linux: mv, rename单次及批次修改档案名称及后缀(批量修改文件名)
- 利用Python爬虫刷新某网站访问量
- [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
- Flink WriteRedis
- 正则表达式 IP域名
- java 好用的 schedule_Java用Timer schedule搞定定时职务
- linux 0.11 返回用户侧,iPhone 11 11 Pro 用户必备教程:重启手机,恢复模式,DFU模式...
- NLP知识包--语义分析-语义角色标注
- 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测眼睛、鼻子、嘴唇和下巴等面部五官