首页 C++_中的map容器

C++_中的map容器

举报
开通vip

C++_中的map容器 ※ 1 ※ C++ 中的 map 容器 内容提要:在标准模板库(STL)中提供了很多的容器 ,它们是存储对象的对象。本文主要介绍 STL 中的关联容器——map 容器,内容包括 map::begin、map::clear、map::count、map::empty、 map::end 等 27 种函数。本容器是以模板的形式设计的,能应用于广泛的数据类型。 关键字:begin、clear、count 、empty、end、find 引言:map 是一个容器,它用于储存数据并且能从一个数据集合中取出...

C++_中的map容器
※ 1 ※ C++ 中的 map 容器 内容提要:在 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 模板库(STL)中提供了很多的容器 ,它们是存储对象的对象。本文主要介绍 STL 中的关联容器——map 容器,内容包括 map::begin、map::clear、map::count、map::empty、 map::end 等 27 种函数。本容器是以模板的形式设计的,能应用于广泛的数据类型。 关键字:begin、clear、count 、empty、end、find 引言:map 是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的数据组成包 含两项,一个是它的数据值,一个是用于排序的关键字。其中关键字是惟一的,它用于将数据自动 排序。而每个元素的数据值与关键字无关,可以直接改变。 正文: 1 map 容器 map 容器简介: map 是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的数据组成包含两项, 一个是它的数据值,一个是用于排序的关键字。其中关键字是惟一的,它用于将数据自动排序。而 每个元素的数据值与关键字无关,可以直接改变。 需加载的头文件: #include using namespace std; 模板原型: template < class Key, class Type, class Traits = less, class Allocator=allocator > > 说明: 表 1 为 map 的参数说明。 表 1 map 的参数说明 参数 含义 Key 存储在 map 容器中的关键字的数据类型 Type 储存在 map 容器中的数据值的数据类型 Traits 它是一个能提供比较两个元素的关键字来决定它们在 map 容器中的相对位置。它是可选的,它的默认值是 less Allocator 它 代 表 存 储 管 理 设 备 。 它 是 可 选 的 , 它 的 默 认 值 为 allocator > map 容器有以下的特点: (1)它是一个相关联的容器,它的大小可以改变,它能根据关键字来提高读取数据能力。 (2)它提供一个双向的定位器来读写取数据。 (3)它已经根据关键字和一个比较函数来排好序。 (4)它的每一个元素的关键字都是惟一的。 (5)它是一个模板,它能提供一个一般且独立的数据类型。 成员变量: map 的成员变量说明如表 2 所示。 ※ 2 ※ 表 2 map 的成员变量说明 成员变量 功能说明 Allocator_type 对象分配器 Const_iterator 提供一个双向的定位器,它能读取 map 中的一个常元 Const_pointer 它能提供到一个常元的指针 Const_reference 一个常元地址 Const_reverse_iterator 提供一个双向的定位器,使得能够在 map 容器中读取 任意一个常值元素 Difference_type 它提供 map 容器中由定位器所指定的范围内的元素的 个数 Iterator 提供一个双向入口定位器,使得能够在 map 中读取或 者修改元素 key_compare 它是提供一个元素间的关键字的次序关系的函数 key_type 它描述每一个元素的关键字 mapped_type 它表示存储在 map 容器中的数据类型 pointer 提供一个指向 map 中的某元素的指针 reference 提供在 map 容器中的一个常元的地址 reverse_iterator 在反向的 map 容器中提供一个双向的入口定位器,使 得能够读取或者修改元素 size_type map 容器中元素个数 Value_type 它提供一个能根据关键字来比较两个元素的相对位置 的函数 下面介绍 map 的成员函数。 1.1 map::begin 功能: 返回第一个元素的定位器(iterator)的地址。 语法: const_iterator begin() const; iterator begin(); 说明: 当返回的第一个元素的地址值为一个常值定位器(_iterator),则 map 不会被修改。 当返回的第一个元素的地址值为一个定位器(iterator),则 map 可被修改。 函数返回值: 返回一个指向第一个元素的双向定位器地址。 示例: /*************************************************** 程序编号:1 程序功能说明:用 begin 来定位到 ctr 的开始位置,并打印出该元素。 ***************************************************/ #include #include int main() { using namespace std; map ctr; map ::iterator cp; ctr.insert(pair (1,'a')); ctr.insert(pair (2,'b')); cp=ctr.begin(); //定位到 ctr 的开始位置 cout<<"The first element is:"<second< #include int main() { using namespace std; map ctr; ctr.insert(pair (1,'a')); ctr.insert(pair (2,'b')); ctr.insert(pair (3,'c')); ctr.clear(); //清空 map 容器 if(ctr.empty()) //map 容器为空时 cout<<"The container is empty"< #include int main() { using namespace std; map ctr; ctr.insert(pair (1,'a')); ctr.insert(pair (2,'b')); ctr.insert(pair (1,'c')); int i; i=ctr.count(1); //求出关键字为 1 的元素的个数 if(i==0) cout<<"There is no such key!"< #include int main() { using namespace std; map ctr; if(ctr.empty()) //map 容器为空时 cout<<"The container is empty"< #include using namespace std; int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 cout<second<<" "; return 0; } int main() { map ctr; map ::const_iterator cp; int i; for(i=0;i<3;i++)ctr.insert(pair (i,i)); //给 ctr 赋值 cout<<"The ctr is: "; print(ctr); //调用子程序来打印 ctr 的内容 cout<second< equal_range ( const Key& _Key ) const; pair equal_range ( ※ 7 ※ const Key& _Key ) const; 说明: _Key 是一个用于排序的关键字。 函数返回值: 返回一对定位器。 要从第一个定位器中取得数据,可用 pr.first。 从第二个定位器中取得数据,则用 pr.second。 示例: /*************************************************** 程序编号:6 程序功能说明:先初始化一个 map,再打印其中的内容,最后打印出关键字>=2 或>2 的元素。 ***************************************************/ #include #include using namespace std; int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 return 0; } int main() { map ctr; pair ::const_iterator, map ::const_iterator> p; int i; for(i=0;i<=3;i++)ctr.insert(pair (i,i)); //给 ctr 赋值 cout<<"The ctr is: "; print(ctr); //调用子程序来打印 ctr 的内容 cout<= 2 is: "; print_one_item(p.first); //调用子程序来打印一项 ※ 8 ※ cout< 2 is: "; print_one_item(p.second); cout< #include using namespace std; #define len 5 int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 return 0; } int main() { map ctr; map ::iterator cp; int i; for(i=0;i(i,i)); //下面先给 ctr 赋值 cout<<"ctr is:"; print(ctr); //调用子程序,把 ctr 打印出来 cout< #include using namespace std; #define len 5 int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map 容器 { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 ※ 11 ※ return 0; } int main() { map ctr; map ::iterator cp; int i; for(i=0;i(i,i)); //下面先给 ctr 赋值 cout<<"ctr is:"; print(ctr); //调用子程序,把 ctr 打印出来 cout< #include using namespace std; int main() { map ctr; ctr.insert(pair (1,'a')); map ctr2(less(),ctr.get_allocator()); cout<<"ctr2's size is: "< insert( const value_type& _Val ); iterator insert( iterator _Where, const value_type& _Val ); template void insert( InputIterator _First, InputIterator _Last ); 说明: 表 4 为参数的说明。 表 4 insert 的参数说明 参数 含义 _Where 第一个被插入到 map 的元素的位置 _Val 插入的参数的值 _First 第一个被插入的位置 _Last 第一个不被插入的位置 如果能在_Where 后面迅速地插入,那么只要很短的时间。 第三个成员函数将范围为[ _First,_Last ]中的元素插入。 ※ 13 ※ 函数返回值: 第一个函数返回一对值,当插入成功时,bool=true,当要插入的元素的关键字与已有的参数的 值相同,则 bool=false,而 iterator 指向插入的位置或者已存在的元素的位置。 第二个函数返回指向插入位置的定位器。 示例: /*************************************************** 程序编号:10 程序功能说明:利用 insert 函数给 ctr 赋值。 ***************************************************/ #include #include using namespace std; #define len 5 int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序打印一个元素 return 0; } int main() { map ctr; map ::iterator cp; int i; for(i=0;i(i,i)); //下面先给 ctr 赋值 cout<<"ctr is:"; print(ctr); //调用子程序,把 ctr 打印出来 cout< #include using namespace std; int main() { map ctr; map >::key_compare kc = ctr.key_comp() ; if(kc( 1, 2 )) { cout<<"kc(1,2) is true"< #include using namespace std; int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 return 0; } int main() { map ctr; map ::const_iterator cp; int i; for(i=0;i<=3;i++)ctr.insert(pair (i,i)); //给 ctr 赋值 cout<<"The ctr is: "; print(ctr); //调用子程序来打印 ctr 的内容 cout<= 2 is: "; print_one_item(cp); //调用子程序来打印一项 cout< map( InputIterator _First, InputIterator _Last ); template map( InputIterator _First, InputIterator _Last, const Traits& _Comp ); template map( InputIterator _First, ※ 17 ※ InputIterator _Last, const Traits& _Comp, const Allocator& _Al ); 说明: 表 5 为 map 函数的参数说明。 表 5 map 函数的参数说明 参数 含义 _Al 一个分配器类 _Comp 一个用于比较的函数,它的默认值为 hash_compare _Right 一个 map 的拷贝 _First 被拷贝的第一个元素的位置 _Last 被拷贝的最后一个元素的位置 所有的构造函数都存储一个分配器和初始化 map 容器。 所有的构造函数都存储一个 Traits 类型的函数对象,它用于对 map 容器的元素进行排序。 头三个构造函数创建一个空的初始 map 容器。 第四个构造函数创建一个_Right 容器的副本。 后三个构造函数拷贝在范围_First~_Last 内的一个 map 容器。 函数返回值: 无。 示例: /*************************************************** 程序编号:13 程序功能说明:先定义一个 ctr1 的 map 容器,再构造一个以 ctr1 相同的容器。 ***************************************************/ #include #include using namespace std; int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 return 0; } int main() { ※ 18 ※ map ctr1; //创建一个有两个为字母为 'a'的 map int i; for(i=0;i<=3;i++)ctr1.insert(pair (i,i)); //给 ctr1 赋值 map ctr2(ctr1); //创建一个以 ctr1 相同的 map 容器 cout<<"The ctr2 is: "; print(ctr2); //打印 ctr2 的内容 cout< #include using namespace std; #define len 5 int main() { map ctr; map ::size_type st; int i; for(i=0;i(i,i)); //先给 ctr 赋值 ※ 19 ※ cout<<"the max_size of ctr is:"; st=ctr.max_size(); cout< #include using namespace std; int print_one_item(map ::const_iterator cp) //用于打印 map 的一个元素 { cout<<"("<first<<" , "<second<<") "; return 0; } int print(map c) //用于打印一个 map { map ::const_iterator cp; for(cp=c.begin();cp!=c.end();cp++) //让 cp 从 c 的开始到结束打印 cp 对应的值 print_one_item(cp); //调用子程序来打印一个元素 ※ 20 ※ return 0; } int main() { map ctr; int i; for(i=0;i<=3;i++)ctr.insert(pair (i,i)); //给 ctr 赋值 cout<<"The ctr is: "; print(ctr); //调用子程序来打印 ctr 的内容 cout<& _Left, const map & _Right ); 说明: _Left 和_Right 是待比较的两个 map 容器。 两个 map 容器相等,当且仅当它们的元素个数相等且同一个位置上的值相等。 函数返回值: 当_Left 和_Right 不同时,返回 True,否则返回 False。 示例: /*************************************************** 程序编号:16 程序功能说明:比较两个 map 容器是否相等。 ***************************************************/ #include ※ 21 ※ #include int main() { using namespace std; map ctr1,ctr2; int i; for(i=0;i<3;i++) { ctr1.insert(pair (i,'a'+i)); ctr2.insert(pair (i,'A'+i)); } if(ctr1!=ctr2) //当 ctr1 与 ct2 不同时 cout<<"They are not equal"<& _Left, const map & _Right ); 说明: _Left 和_Right 是待比较的两个 map 容器。 两个 map 容器的大小比较是基于第一个不相同的元素的大小比较。 函数返回值: 当_Left<_Right 时,返回 True,否则返回 False。 示例: /*************************************************** 程序编号:17 程序功能说明:比较 ctr1 与 ctr2 的大小。 ***************************************************/ #include ※ 22 ※ #i
本文档为【C++_中的map容器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_315169
暂无简介~
格式:pdf
大小:303KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-11-30
浏览量:18