因此我们通常这样构造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 */