【C++编程语言】C++的 Map和Multimap容器

【C++编程语言】C++的 Map和Multimap容器挑战 30 天在头条写日记 1

欢迎大家来到IT世界,在知识的湖畔探索吧!

#挑战30天在头条写日记#

1.map容器基本概念

简介

  • map中所有元素都是pair
  • pair中第一个为key(键值),起到索引作用,第二个为value(实值)
  • 所有元素都会根据元素的key值自动排序

本质

  • map/multimap属于关联式容器,底层结构是用二叉树实现

优点

  • 可以根据key值快速找到value值

map/multimap区别

  • map不允许容器中有重复key值元素
  • multimap允许容器中有重复key值元素

2.map容器的构造和赋值

功能描述

对map容器进行构造和赋值操作

注意:map中所有元素都是成对出现,插入数据时候要使用对组

/* 函数原型 构造 map<T1,T2> mp map 默认构造函数 map(const map &mp) 拷贝构造函数 赋值 map& operator = (const map &mp) 重载等号操作符 */ void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << "value = " << (*it).second << endl; } cout << endl; } //map容器 构造和赋值 void test01() { //默认构造 map<int, int> m; m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(4, 40)); printMap(m); //拷贝构造 map<int, int>m2(m); printMap(m2); //赋值 map<int, int>m3; m3 = m2; printMap(m3); } int main() { test01(); system("pause"); return 0; }

欢迎大家来到IT世界,在知识的湖畔探索吧!

3.map容器大小和交换

功能描述

统计map容器大小以及交换map容器

欢迎大家来到IT世界,在知识的湖畔探索吧!/* 函数原型 size() 返回容器中元素数目 empty() 判断容器是否为空 swap(st) 交换两个集合容器 */ void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << "value = " << (*it).second << endl; } cout << endl; } //map容器 构造和赋值 void test01() { //构造 map<int, int> m; //插入数据 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(4, 40)); //map 的为空 和 大小判断 if (m.empty()) { cout << "m为空" << endl; }else { cout << "m不为空" << endl; cout<< "m的大小为:"<< m.size() << endl; } //map交换 map<int, int>m2; m2.insert(pair<int, int>(5, 50)); m2.insert(pair<int, int>(6, 60)); m2.insert(pair<int, int>(7, 70)); m2.insert(pair<int, int>(8, 80)); cout << "交换前:" << endl; printMap(m); printMap(m2); cout << "交换后:" << endl; m.swap(m2); printMap(m); printMap(m2); } int main() { test01(); system("pause"); return 0; }

4.map插入和删除

功能描述:map容器进行插入数据和删除数据

/* 函数原型 insert(elem) 在容器中插入元素 clear() 清除所有元素 erase(pos) 删除pos迭代器所指的元素,返回下一个元素的迭代器 erase(beg,end) 删除区间[beg,end]的所有元素,返回下一个元素的迭代器 erase(key) 删除容器中值为key的元素 */ void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << "value = " << (*it).second << endl; } cout << endl; } //map容器 构造和赋值 void test01() { //构造 map<int, int> m; //插入数据 //第一种 m.insert(pair<int, int>(1, 10)); //第二种 m.insert(make_pair(2, 20)); //第三种 m.insert(map<int,int>::value_type(3,30)); //第四种 //[]不建议使用,用途是通过key访问到value m[4] = 40; printMap(m); //删除 m.erase(m.begin()); printMap(m); m.erase(3);//删除key值为3 的; //清空 m.clear(); m.erase(m.begin(), m.end()); } int main() { test01(); system("pause"); return 0; }

5.map查找和统计

功能描述:对map容器进行查找数据以及统计数据

欢迎大家来到IT世界,在知识的湖畔探索吧!/* 函数原型 find(key) 查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,返回set.end(); count(key) 统计key元素的个数 */ void printMap(map<int, int>& m) { for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << "value = " << (*it).second << endl; } cout << endl; } //map容器 构造和赋值 void test01() { //构造 map<int, int> m; //插入数据 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(4, 40)); //查找 map<int, int>::iterator pos = m.find(3); if (pos != m.end()) { cout << "查找到了元素 key = " << (*pos).first << " value = " << pos->second << endl; } else { cout << "未找到元素" << endl; } //统计 //map不允许插入重复可以元素 所以返回值只有0和1 int num = m.count(3); cout << "num = " << num << endl; } int main() { test01(); system("pause"); return 0; }

6.map容器排序

class MyCompare { public: bool operator()(int v1,int v2) const { return v1 > v2; } }; void test01() { //构造 并修改排序规则 map<int, int, MyCompare> m; //插入数据 m.insert(pair<int, int>(1, 10)); m.insert(pair<int, int>(2, 20)); m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(4, 40)); for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++) { cout << "key = " << (*it).first << "value = " << (*it).second << endl; } cout << endl; } int main() { test01(); system("pause"); return 0; }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/91678.html

(0)
上一篇 2024年 11月 26日 上午7:23
下一篇 2024年 11月 26日 上午7:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信