容器之分类与各种测试(四)——map
map和set的区别在于,前者key和value是分开的,前者的key不会重复,value可以重复;后者的key即为value,后者的value不允许重复。还有,map在插入时可以使用 [ ]进行(看插入时代码),其采用了看起来像是数组插值的方法进行元素的插入。
例程
- #include<stdexcept>
- #include<string>
- #include<cstdlib>
- #include<cstdio>
- #include<algorithm>
- #include<iostream>
- #include<ctime>
- #include<map>
- using namespace std;
- long get_a_target_long()
- {
- long target = 0;
- cout<<"target(0~"<<RAND_MAX<<"):";
- cin>>target;
- return target;
- }
- string get_a_target_string()
- {
- long target = 0;
- char buf[10];
- cout<<"target(0~"<<RAND_MAX<<"):";
- cin>>target;
- snprintf(buf, 10, "%ld", target);
- return string(buf);
- }
- int compareLongs(const void* a, const void* b)
- {
- return (*(long*)a - *(long*)b);
- }
- int compareStrings(const void *a, const void *b)
- {
- if(*(string*)a > *(string*)b)
- return 1;
- else if(*(string*)a < *(string*)b)
- return -1;
- else
- return 0;
- }
- void test_map(long& value)
- {
- cout << "\ntest_map().......... \n";
- map<long, string> c;
- char buf[10];
- clock_t timeStart = clock();
- for(long i=0; i< value; ++i)
- {
- try
- {
- snprintf(buf, 10, "%d", rand());
- c[i] = string(buf); //表现上像是数组插入值,实际上在其内部会自动将i 和 buf 合成为一个pair进行插入
- }
- catch(exception& p)
- {
- cout << "i=" << i << " " << p.what() << endl;
- abort();
- }
- }
- cout << "milli-seconds : " << (clock()-timeStart) << endl;
- cout << "map.size()= " << c.size() << endl; //元素个数
- cout << "map.max_size()= " << c.max_size() << endl;
- long target = get_a_target_long();
- timeStart = clock();
- auto pItem = c.find(target);
- cout << "c.find(), milli-seconds : " << (clock()-timeStart) << endl;
- if (pItem != c.end())
- cout << "found, value=" << (*pItem).second << endl;
- else
- cout << "not found! " << endl;
- }
- int main()
- {
- long int value;
- cout<<"how many elements: ";
- cin>>value;
- test_map(value);
- return 0;
- }
运行结果
容器之分类与各种测试(四)——map的更多相关文章
- 容器之分类与各种测试(四)——unordered_set和unordered_map
关于set和map的区别前面已经说过,这里仅是用hashtable将其实现,所以不做过多说明,直接看程序 unordered_set #include<stdexcept> #includ ...
- 容器之分类与各种测试(四)——unordered-multiset
unordered-multiset是不定序关联式容器,其底部是通过哈希表实现功能. (ps:黑色框就是bucket,白色框即为bucket上挂载的元素) 为了提高查找效率,bucket(篮子)的数量 ...
- 容器之分类与各种测试(四)——multimap
multiset和multimap的具体区别在于,前者的key值就是自己存储的value,后者的key与value是分开的不相关的. 例程 #include<stdexcept> #inc ...
- 容器之分类与各种测试(四)——multiset
multiset是可重复关键字的关联式容器,其与序列式容器相比最大的优势在于其查找效率相当高.(牺牲空间换取时间段) 例程 #include<stdexcept> #include< ...
- 容器之分类与各种测试(四)——set
set和multiset的去别在于前者的key值不可以重复,所以用随机数作为其元素进行插入时,遇到重复元素就会被拒绝插入(但是程序不会崩溃). 例程 #include<stdexcept> ...
- 容器之分类与各种测试(四)——unordered-multimap
unordered-multiset与unordered-multimap的区别和multiset与multimap的区别基本相同,所以在定义和插入时需要注意 key-value 的类型. 例程 #i ...
- 容器之分类与各种测试(三)——stack
stack是栈,其实现也是使用了双端队列(只要不用双端队列的一端,仅用单端数据进出即完成单端队列的功能),由于queue和stack的实现均是使用deque,没有自己的数据结构和算法,所以这俩也被称为 ...
- 容器的分类与各种测试(三)——deque
deque是双端队列,其表象看起来是可以双端扩充,但实际上是通过内存映射管理来营造可以双端扩充的假象,如图所示 比如,用户将最左端的buff用光时,map会自动向左扩充,继续申请并映射一个新的buff ...
- 容器的分类与各种测试(二)——vector部分用法
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template Library, 标准 ...
随机推荐
- poj 2724 Purifying Machine(二分图最大匹配)
题意: 有2^N块奶酪,编号为00...0到11..1. 有一台机器,有N个开关.每个开关可以置0或置1,或者置*.但是规定N个开关中最多只能有一个开关置*. 一旦打开机器的开关,机器将根据N个开关的 ...
- zabbix部署文档
环境:zabbix server centos 7 1611最小化安装 172.16.103.2 zabbix client Centos 7 1611 最小化安装 172.16.103.3 1,配置 ...
- Kubernetes Deployment 源码分析(二)
概述startDeploymentController 入口逻辑DeploymentController 对象DeploymentController 类型定义DeploymentController ...
- 模块化开发 | es6模块暴露与引入
CommonJS模块开发 CommonJS定义 每个文件就一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 私有作用域不会污染全局作用域. 模块可加载多次, ...
- 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据
1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...
- flask gevent
flask的不同部署方式 使用gevent部署,只是在不同请求之间是异步的,同一个请求之间还是串行的. https://iximiuz.com/en/posts/flask-gevent-tutori ...
- Navicat15最新版本破解 亲测可用!!!(Navicat Premium 注册出现 No All Pattern Found! File Already Patched)
1.下载Navicat Premium官网https://www.navicat.com.cn/下载最新版本下载安装 2.本人网盘链接:https://pan.baidu.com/s/1ncSaxId ...
- sql关联修改
UPDATE p set p.ClientID = c.id from PaymentTable p left JOIN ClientTable c on p.ClientID = c.Clie ...
- Ubuntu安装BCC
Ubuntu安装BCC 教程 官方文档 安装 这里官方文档中首先讲到的是二进制文件的安装,直接通过apt进行安装 sudo apt-get install bpfcc-tools linux-head ...
- 面向政务企业的开发者工具集-逐浪文本大师v0.1正式发布(含代码全部开源啦!)
这是一款基于.net 4.7环境开发的开发者工具. 一个实用的windows小工具集合,里面包含了多个常用的小软件.其中的批量修改文件名及文件内容功能,可以自定义修改规则,支持规则的导入与导出.不需要 ...