c++标准模板库之map

xiaoxiao2021-02-28  61

c++标准模板库之map

1、定义 map是一种二叉树的数据存储结构。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。 2、map的构造函数 #include<map> //要包含的头文件 using namespace std;//using std::map;using std::pair; map<T,S>mp; mp[key]=value;

因此我们通常这样构造map:

map<int,string>mp; //int ,string可以为其他数据类型

3、数据的插入 插入方法这里有两种: (1)insert方法

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp.insert(pair<int,string>(0,"aaa")); mp.insert(pair<int,string>(1,"bbb")); mp.insert(pair<int,string>(2,"ccc")); mp.insert(pair<int,string>(3,"ddd")); //通过迭代器遍历(正向遍历) map<int,string>::iterator iter; //定义正向迭代器 for (iter=mp.begin();iter!=mp.end();iter++) { cout<<iter->first<<" "<<iter->second<<endl; } return 0; } /* 结果: 0 aaa 1 bbb 2 ccc 3 ddd */

有的人可能不明白pair是是什么,这里解释一下

template<class T, class U> struct pair { typedef T first_type; typedef U second_type T first; U second; pair(); pair(const T& x, const U& y); //pair的构造函数 template<class V, class W> pair(const pair<V, W>& pr); };

pair是一个模块结构体,它有两个成员,一个是first,另外一个是second,这个结构体经常做为一些类的参数和返回值。这里的map中的insert就是将pair作为一个参数传递。 (2)数组方法

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; //通过迭代器遍历(反向遍历) map<int,string>::reverse_iterator riter; //定义反向迭代器 for (riter=mp.rbegin();riter!=mp.rend();riter++) { cout<<riter->first<<" "<<riter->second<<endl; } return 0; } /* 结果: 3 dddd 2 cccc 1 bbbb 0 aaaa */

4、数据的遍历(迭代器方法)

数据的遍历方式已经在上述数据的插入中介绍完毕。 这里补充一下遍历用到的几个函数:

(1)begin()

begin()函数返回一个迭代器指向map的第一个元素。

iterator begin(); (2)end()

end()函数返回一个迭代器指向map的尾部。

iterator end(); (3)rbegin()

rbegin()函数返回一个指向map尾部的逆向迭代器。

reverse_iterator rbegin(); (4)rend()

rend()函数返回一个指向map头部的逆向迭代器。

reverse_iterator rend();

5、数据的查找 find()方法定义

iterator find( const KEY_TYPE &key );

find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; map<int,string>::iterator iter; iter=mp.find(1); cout<<iter->first<<" "<<iter->second<<endl; return 0; } /* 结果: 1 bbbb */

6、数据的删除 erase()方法定义

void erase( iterator pos ); void erase( iterator start, iterator end ); size_type erase( const KEY_TYPE &key );

erase()函数删除在pos位置的元素,或者删除在start和end之间的元素,或者删除那些值为key的所有元素。

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; map<int,string>::iterator iter1; iter1=mp.find(1); mp.erase(iter1); map<int,string>::iterator iter2; for (iter2=mp.begin();iter2!=mp.end();iter2++) { cout<<iter2->first<<" "<<iter2->second<<endl; } return 0; } /* 结果: 0 aaaa 2 cccc 3 dddd */

7、返回容器元素个数 size()函数

size_type size();

size()函数返回map中保存的元素个数。

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; cout<<mp.size(); return 0; } /* 结果: 4 */

8、清空容器 clear()函数

void clear();

clear()函数删除map中的所有元素。

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; mp.clear(); cout<<mp.size(); return 0; } /* 结果: 0 */

9、判断容器是否为空 empty()函数

bool empty();

empty()函数返回真(true)如果map为空,否则返回假(false)。

#include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; //定义map类mp mp[0]="aaaa"; mp[1]="bbbb"; mp[2]="cccc"; mp[3]="dddd"; mp.clear(); if(mp.empty()) { cout<<"container is empty!"; } return 0; } /* 结果: container is empty! */

10、返回map可以容纳的最大元素个数 max_size()函数

size_type max_size(); #include<iostream> #include<map> using namespace std; int main () { map<int,string>mp; cout<<mp.max_size(); return 0; } /* 结果: 178956970 */
转载请注明原文地址: https://www.6miu.com/read-2620295.html

最新回复(0)