C++ 10.1和10.2 关联容器-----pair 类型
2015-06-10 09:37
288 查看
参考:《10.1,10.2关联容器—-三种构造函数》
/article/1495504.html
参考:《 4.1 数组 —-显示的初始化》
/article/1495480.html
参考:《 12.4.5 类成员的显示初始化》
http://write.blog.csdn.net/mdeditor#!postId=46605673
关联容器与顺序容器的本质区别在于:关联容器通过键(key)存储和读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素。
了解一种与关联容器相关的简单的标准库类型—-pair 类型,该类型在utility 头文件中定义。 # include< utility >
=======================================================================================================
关联容器与顺序容器的本质区别在于:关联容器通过键(key)存储和读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素。
关联容器支持通过键来高效地查找和读取元素。
- 两个基本得关联容器类型是map和set .
map 的元素以键-值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据.
set 仅包含一个键,并有效地支持关于某个键是否存在的查询。一般的,如果希望有效地存储不同值的集合,那么使用set 容器比较合适,而map 容器则更适用于需要存储(乃至修改)每个键所关联的值的情况。在做某种文本处理时,可使用set保存要忽略的单词。而字典则是map的一种很好的应用:单词本身是键,解释说明是值。
set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素。如果一个键对应多个实例,则需使用multimap或multiset类型,这两种类型允许多个元素拥有相同的键。
使用关联容器时,都必须要包含头文件,分别是 # include< map > 和 # include< set >
如果创建pair对象时不提供初始化式,则调用默认构造函数对其成员采用值初始化。于是anon是包含两个空string类型成员的pair对象。line 则是存储一个空string类型对象,一个空的vector类型对象。word_count中的int型成员获得0值
关联容器不提供 front 、 push_front 、pop_front、back、push_back以及pop_back操作。
三种构造函数
C< T> c;
C< T> c1(c2);
C< T> c(b,e);
(都是使用这三种构造函数初始化的,这三个构造函数也适用于顺序容器)
关联容器不能通过容器大小来定义,因为这样就无法知道键所对应的值是什么
支持 9.3.4 节中的关系运算
表9-6中列出的begin、end、rbegin和end操作
(到时候查书本吧!!!!)
/article/1495504.html
参考:《 4.1 数组 —-显示的初始化》
/article/1495480.html
参考:《 12.4.5 类成员的显示初始化》
http://write.blog.csdn.net/mdeditor#!postId=46605673
简介
使用关联容器时,都必须要包含头文件,分别是 # include< map > 和 # include< set >关联容器与顺序容器的本质区别在于:关联容器通过键(key)存储和读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素。
了解一种与关联容器相关的简单的标准库类型—-pair 类型,该类型在utility 头文件中定义。 # include< utility >
=======================================================================================================
一、引言
标准容器类型有的另一项内容—-关联容器。关联容器与顺序容器的本质区别在于:关联容器通过键(key)存储和读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素。
关联容器支持通过键来高效地查找和读取元素。
- 两个基本得关联容器类型是map和set .
map 的元素以键-值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据.
set 仅包含一个键,并有效地支持关于某个键是否存在的查询。一般的,如果希望有效地存储不同值的集合,那么使用set 容器比较合适,而map 容器则更适用于需要存储(乃至修改)每个键所关联的值的情况。在做某种文本处理时,可使用set保存要忽略的单词。而字典则是map的一种很好的应用:单词本身是键,解释说明是值。
set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素。如果一个键对应多个实例,则需使用multimap或multiset类型,这两种类型允许多个元素拥有相同的键。
使用关联容器时,都必须要包含头文件,分别是 # include< map > 和 # include< set >
二、pair类型——# include< utility >
了解一种与关联容器相关的简单的标准库类型—-pair 类型,该类型在utility 头文件中定义。include< utility >
1. pair 的创建和初始化
pair 包含两个数据值,与容器一样,pair 也是一种模板类型,但与顺序容器区别之处在于,在创建pair对象时,必须提供两个类型名:pair 对象所包含的两个数据成员各自对应的类型名字,这两个类型不必相同。vector<int> ivec;//定义一个vector容器 pair<string,string> anon;//有两个string类型 pair<string,int> word_count;//一个string,一个int pair<string,vector<int> > line;
如果创建pair对象时不提供初始化式,则调用默认构造函数对其成员采用值初始化。于是anon是包含两个空string类型成员的pair对象。line 则是存储一个空string类型对象,一个空的vector类型对象。word_count中的int型成员获得0值
//也可以在定义时提供初始化式 pair<string,string> author("james","joyce");//定义一个pair类型的对象,名为author,有两个string成员,分别初始化为字符串“james”和“joyce”
//可以通过typedef 简化其声明 typedef pair<string,string> Author; Author proust("wewew","wewe"); Author joyce("wewew","wewe");
2.pair 对象的操作—first成员和second成员
与其他标准库类型不同,对于pair类,可以直接访问其数据成员:其成员都是公有的,分别命名为 first 和 second。只需使用普通的点操作符—–成员访问标识即可访问其成员:string firstBook; if(author.first=="james"&&author.second=="joyce") firstBook ="Stephen Hero";
3、生成新的pair对象—make_pair函数
除了构造函数,标准库还定义了make_pair函数,由传递给它的两个实参生成一个新的pair对象。pair<string,string> next_auth; string first,last; while(cin>>first>>last)//通过标准输入,给string对象初始化 { next_auth = make_pair(first,last); }
next_auth = pair<string,string>(first,last); pair<string,string> next_auth; while(cin>>next_auth.first>>next_auth.second){ }
//习题 10.1 #include <iostream> #include<list> #include<vector> #include<string> #include<cstring> #include<utility>//头文件包含,使用其中的pair类型 using namespace std; int main() { string str; int ival; pair<string,int> sipr; vector<pair<string,int> > pvec; //两个 > 符号之间要有空格,不然系统会认为是>>操作符 while(cin>>str>>iter){ exam=make_pair(str,iter); pvec.push_back(exam); } return 0; }
//习题 10.2 //方法一:习题10.1 //方法二:采用直接访问数据成员的方法生成pair对象 int main(){ string str; int ival; pair<string,int> sipr; vector< pair<string,int> > pvec; while(cin>>str>>ival){ sipr.first=str; sipr.second=ival; pvec.push_back(sipr); } return 0; }
//方法三:采用提供初始化式的方法创建pair对象 int main(){ string str; int ival; vector<pair<string,int> > pvec; while(cin>>str>>ival){ pair<string,int> sipr(str,ival); pvec.push_back(sipr); } return 0; }
//12.4.5 节 类成员的显示初始化 pair<int,int>p2={0,42}; //因为pair类定义了构造函数,所以尽管其数据成员为public,也不能采用这种显示初始化方式。只有没有定义构造函数且全体数据成员为public的类,才可以采用与初始化数组元素相同的方式初始化其成员: pair<int,int>p2(0,42); //往下看
二、关联容器
1、关联容器提供的操作
关联容器共享大部分——但并非全部的顺序容器的操作。关联容器不提供 front 、 push_front 、pop_front、back、push_back以及pop_back操作。
三种构造函数
C< T> c;
C< T> c1(c2);
C< T> c(b,e);
(都是使用这三种构造函数初始化的,这三个构造函数也适用于顺序容器)
关联容器不能通过容器大小来定义,因为这样就无法知道键所对应的值是什么
支持 9.3.4 节中的关系运算
表9-6中列出的begin、end、rbegin和end操作
(到时候查书本吧!!!!)
2、根据键排列元素
容器元素根据键的次序排列——在迭代遍历关联容器时,我们可以确保键的顺序访问元素,而与元素在容器中的存放位置完全无关。相关文章推荐
- c++ 智能指针用法详解
- 2015年大一下第13周项目4-处理C++源代码的程序(1)main()函数
- 第十四周 阅读项目 C++对文本输入输出
- 第十四周 阅读项目 C++字符创的标准输入输出
- 【C++】DISALLOW_COPY_AND_ASSIGN
- 第十四周 阅读项目 C++标准输入输出
- 第十四周项目4 - 处理C++源代码的程序(m后n行加注释)
- C++打开指定文件夹,并选中文件
- c/C++内存分配
- c++入门之一:EGE图形库介绍与配置(VS2013、DEVCPP)
- Windows下的codeblocks+MinGW开发C++运行环境
- 第十四周项目4 - 处理C++源代码的程序({}换行)
- 《爱编程,爱c++十三期-第三章-c++带默认形参值的函数》
- c语言快速排序算法(转)
- C语言动态内存管理
- 浅谈C语言中的联合体
- C/C++文件之eof()
- 面向对象学习【c++】
- C++ 画星号图形——空心梯形(核心代码记录)
- 【leetcode c++】09 Palindrome Number