STL map

news/2024/11/29 3:38:05/

map

在STL的头文件中<map>中定义了模版类map和multimap,用有序二叉树表存储类型为pair<const Key, T>的元素对序列。序列中的元素以const Key部分作为标识,map中所有元素的Key值必须是唯一的,multimap则允许有重复的Key值。

可以将map看作是由Key标识元素的元素集合,这类容器也被称为“关联容器”,可以通过一个Key值来快速决定一个元素,因此非常适合于需要按照Key值查找元素的容器。 
map模版类需要四个模版参数,第一个是键值类型,第二个是元素类型,第三个是比较算子,第四个是分配器类型。其中键值类型和元素类型是必要的。

定义map对象的代码示例:

map<string, int> m;

 

 

 

map的基本操作:

 

/*  向map中插入元素  */
m[key] = value; //  [key]操作是map很有特色的操作,如果在map中存在键值为key的元素对, 则返回该元素对的值域部分,否则将会创建一个键值为key的元素对,值域为默认值。所以可以用该操作向map中插入元素对或修改已经存在的元素对的值域部分。
m.insert(make_pair(key, value));    //  也可以直接调用insert方法插入元素对,insert操作会返回一个pair,当map中没有与key相匹配的键值时,其first是指向插入元素对的迭代器,其second为true;若map中已经存在与key相等的键值时,其first是指向该元素对的迭代器,second为false。/*  查找元素  */
int i = m[key]; //  要注意的是,当与该键值相匹配的元素对不存在时,会创建键值为key(当另一个元素是整形时,m[key]=0)的元素对。
map<string, int>::iterator it = m.find(key);    //  如果map中存在与key相匹配的键值时,find操作将返回指向该元素对的迭代器,否则,返回的迭代器等于map的end()(参见vector中提到的begin()和end()操作)。/*  删除元素  */
m.erase(key);   //  删除与指定key键值相匹配的元素对,并返回被删除的元素的个数。
m.erase(it);    //  删除由迭代器it所指定的元素对,并返回指向下一个元素对的迭代器。/*  其他操作  */
m.size();       //  返回元素个数
m.empty();      //  判断是否为空
m.clear();      //  清空所有元素

 

 

 

ExampleOne:

 

#include <iostream>
#include <map>using namespace std;typedef map<int, string, less<int> > M_TYPE
typedef M_TYPE::iterator M_IT
typedef M_TYPR::const_iterator M_CITint main()
{M_TYPR myTestMap;myTestMap[3] = "No.3";myTestMap[5] = "No.5";myTestMap[1] = "No.1";myTestMap[2] = "No.2";myTestMap[4] = "No.4";M_IT itStop = myTestMap.find(2);cout << "myTestMap[2] = " << itStop->second << endl;itStop->second = "No.2 After modification";cout << "myTestMap[2] = " << itStop->second << endl;cout << "Map contents:" << endl;for (M_CIT it = myTestMap.begin(); it != myTestMap.end(); it++){cout << it->second << endl;}return 0;
}

程序执行的输出结果为: 
MyTestMap[2] = No.2 
MyTestMap[2] = No.2 After modification Map contents : 
No.1 
No.2 After modification 
No.3 
No.4 
No.5

ExampleTwo:

#include <iostream>
#include <map>using namespace std;int main()
{map<string, int> m;m["one"] = 1;m["two"] = 2;// 几种不同的 insert 调用方法 m.insert(make_pair("three", 3));m.insert(map<string, int>::value_type("four", 4)); m.insert(pair<string, int>("five", 5));string key;while (cin >> key){map<string, int>::iterator it = m.find(key);if (it == m.end()){cout << "No such key!" << endl;}else{cout << key << " is " << it->second << endl;cout << "Erased " << m.erase(key) << endl;}}return 0; 
}

 

 

 

 

 


http://www.ppmy.cn/news/842266.html

相关文章

RS485MODBUS RTU转PROFINET网关/PROFINET转MODBUS RTU网关将施耐德ATV610变频器接入西门子1500 PROFINET网络配置方法

本文主要介绍北京微硬创新科技有限公司&#xff08;微硬创新&#xff09;http://www.profibus-dp.com/的MODBUS RTU转PROFINET&#xff08;PROFINET转MODBUS RTU&#xff09;网关PNMD485-K20将施耐德ATV610变频器接入西门子PLC1500 PROFINET网络的使用方法&#xff1a; MODBUS …

直播源格式转换教程——rtmp/rtsp/http/m3u8!!

之前寻找直播源,发现好多rtmp开头的,或者是rtsp开头的,但是ATV里面的个人链接是支持m3u8格式的。怎么办?小编发现了几个规律,网友可作参考。

用PC机实现与ATV12变频器Modbus通信控制电机

**用PC机实现与ATV12变频器Modbus通信控制电机**首先将ATV12变频器设置为远程模式&#xff0c;通过按变频器控制面板上的 “MODE” 键 3 秒可以切换远程 / 本地配置。 通过导航按钮CONF – FULL – CON- 依次设置Modbus地址&#xff08;ADD&#xff09;、Modbus波特率&#xff…

安装pika配置系统服务过程中遇到的错误

今天记录一下在我安装完pika后配置系统服务启动时遇到的一系列问题&#xff0c;安装pika及配置服务参考&#xff1a;Linux阿里云ECS中安装Pika及配置Pika为系统服务开机自启动Linux阿里云ECS中安装Pika及配置Pika为系统服务开机自启动&#xff0c;不止是pika&#xff0c;在你配…

ATV 开发 二 、内置gtvs

内置Google TV Services&#xff08;GTVS&#xff09; Google TV Services&#xff08;GTVS&#xff09;是Google服务的集合&#xff0c;例如YouTube和Google Play&#xff0c;它们不属于Android平台或Android开源项目。根据Android TV许可协议&#xff0c;只有签约的谷歌合作…

三菱FX3U 485BD与施耐德ATV71变频器通讯程序

三菱FX3U 485BD与施耐德ATV71变频器通讯程序 程序为原创&#xff0c;稳定可靠&#xff0c;有注释。并附送程序&#xff0c;有接线方式&#xff0c;设置。 同时实现变频器 DRIVECOM流程&#xff0c;解决施耐德ATV变频器断电重启后&#xff0c;自准备工作&#xff0c;程序稳定可靠…

三菱FX3U与3台施耐德ATV12变频器通讯程序三菱FX3U与3台施耐德ATV12变频器通讯案例程序

三菱FX3U与3台施耐德ATV12变频器通讯程序三菱FX3U与3台施耐德ATV12变频器通讯案例程序&#xff0c;有注释。 并附送程序&#xff0c;有接线方式&#xff0c;设置。 同时解决施耐德ATV变频器断电重启后&#xff0c;自准备工作&#xff0c;程序稳定可靠。 器件&#xff1a;三菱FX…

200plc与施耐德ATV610变频器modbus通讯

200plc与施耐德ATV610变频器modbus通讯 1&#xff0c;读写变频器的内部参数 2&#xff0c;控制变频器正反转&#xff0c;停止&#xff0c;读电压电流 3&#xff0c;设置变频器输出频率 有详细注释&#xff0c;简单易懂 ID:6910656225693423