欢迎大家来到IT世界,在知识的湖畔探索吧!
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