C++ Map关联容器实例与常用成员函数详解
"C++ Map的实例使用说明" 在C++编程中,Map是一种关联容器,它允许我们存储键值对,其中每个键都是唯一的,值是与该键相关的数据。STL(Standard Template Library)中的map是双向映射表,提供了高效查找、插入和删除元素的功能。本文将通过实例演示如何在C++中使用map以及其主要成员函数。 首先,让我们了解如何包含所需的头文件并使用命名空间: ```cpp #include <iostream> #include <map> #include <string> using namespace std; ``` `map<string, int>`是一个模板,其中`string`是键的类型,`int`是值的类型。在`main()`函数中,我们创建了两个map对象`m1`和`m2`,它们分别用于存储字符串和整数对。 接下来,我们使用`insert()`函数插入元素。`insert()`函数有多种形式: 1. `pair<map<string, int>::iterator, bool> insert(pair<string, int>)`: 这种形式接收一个键值对,如果键不存在,则插入新元素并返回`true`,否则不插入并返回`false`。例如: ```cpp pair<map<string, int>::iterator, bool> insert_pair = m1.insert(pair<string, int>("abc", 5)); cout << "insert()"; if (insert_pair.second) { cout << "element inserted successfully!" << endl; } else { cout << "insert element failed!" << endl; } ``` 2. `void insert(input_iterator start, input_iterator end)`: 用于插入一系列键值对,这里一般通过`range-based for`循环实现,但在这里没有展示。 3. `pair<iterator, bool> insert(const pair<KEY_TYPE, VALUE_TYPE>& val)`:这是另一种插入单个键值对的方式。 4. `insert()`还可以在已存在的键上更新值,例如: ```cpp m1["ksd"] = 40; // 更新键"ksd"的值 ``` `begin()`和`end()`函数返回迭代器,分别指向map的第一个和最后一个元素(但不包括`end()`)。它们可以用于遍历map中的所有键值对: ```cpp cout << endl << "begin() & end():" << endl; for (auto it = m1.begin(); it != m1.end(); ++it) { cout << "Key: " << it->first << ", Value: " << it->second << endl; } ``` `reverse_iterator`是反向迭代器,它从容器的末尾向前遍历。在这个例子中没有使用,但如果需要从后向前遍历,可以这样操作: ```cpp for (auto rit = m1.rbegin(); rit != m1.rend(); ++rit) { cout << "Key: " << rit->first << ", Value: " << rit->second << endl; } ``` 总结来说,C++的map容器提供了一种方便的方法来存储和管理键值对,通过`insert()`函数可以高效地添加或更新元素,而`begin()`和`end()`(及`rbegin()`和`rend()`)则用于遍历容器。理解这些基本操作有助于在实际编程中灵活运用map进行数据存储和查询。
#include<map>
#include<string>
using namespace std;
int main()
{
map<string,int> m1,m2;
pair<map<string,int>::iterator, bool> insert_pair;
pair<map<string,int>::iterator, map<string,int>::iterator> mapPair;
map<string,int>::iterator it;
map<string,int>::reverse_iterator rit;
//iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val )
//void insert( input_iterator start, input_iterator end )
//pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val )
//insert,当map中存在某个关键字时,insert是插入不了数据的
//但是用数组方式就可以覆盖以前该关键字对应的值
m1["ksd"] = 30;
m1.insert(pair<string,int>("abc",10));
m1.insert(map<string,int>::value_type("abcd",20));
m1["bcd"] = 30;
m1["ksd"] = 40;
insert_pair = m1.insert(pair<string,int>("abc",5));
cout<<"insert()"<<endl;
if(insert_pair.second)
{
cout<<"insert element successfully!"<<endl;
}
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 16
- 资源: 33
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展