C++pair类型

标准库类型--pair类型定义在utility头文件中定义

 本文地址:http://www.cnblogs.com/archimedes/p/cpp-pair.html,转载请注明源地址。

1、pair的创建和初始化

pair包含两个数值,与容器一样,pair也是一种模板类型。但是又与之前介绍的容器不同,在创建pair对象时,必须提供两个类型名,两个对应的类型名的类型不必相同

pair<string,string>anon;
pair<string,int>word_count;
pair<string, vector<int> >line;

当然也可以在定义时为每个成员提供初始化式:

pair<string,string>author("James","Joy");

pair类型的使用相当的繁琐,如果定义多个相同的pair类型对象,可以使用typedef简化声明:

typedef pair<string,string> Author;
Author proust("March","Proust");
Author Joy("James","Joy");

2、pair对象的操作

对于pair类,可以直接访问其数据成员:其成员都是公有的,分别命名为first和second,只需要使用普通的点操作符

string firstBook;
if(author.first=="James" && author.second=="Joy")
    firstBook="Stephen Hero";

3、生成新的pair对象

除了构造函数,标准库还定义了一个make_pair函数,由传递给它的两个实参生成一个新的pair对象

pair<string, string> next_auth;
string first,last;
while(cin>>first>>last) {
    next_auth=make_pair(first,last);
    //...
}

还可以用下列等价的更复杂的操作:

next_auth=pair<string,string>(first,last);

由于pair的数据成员是公有的,因而可如下直接地读取输入:

pair<string, string> next_auth;
while(cin>>next_auth.first>>next_auth.last) {
    //...
}

4、编程实践

练习:编写程序读入一系列string和int型数据,将每一组存储在一个pair对象中,然后将这些pair对象存储在vector容器

#include<iostream>
#include<string>
#include<vector>
#include<utility>
using namespace std;

int main()
{
    pair<string, int>p;
    typedef vector< pair<string, int> > VP;
    VP vp;
    while(cin>>p.first>>p.second)
    {
        vp.push_back(make_pair(p.first,p.second));

    }
    VP::iterator it;
    for(it=vp.begin(); it!=vp.end(); it++)
        cout<<it->first<<","<<it->second<<endl;

    return 0;
}
时间: 2024-11-02 22:07:08

C++pair类型的相关文章

谈谈C++学习之Pair的使用方法_C 语言

一.Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a; 表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化. pair<string, string> a("James", "Joy"); 也可以像上面一样在定义的时候直接对其初始化. 由于pair类型的使

java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题

参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(type erasure). Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节码中是不包含泛型中的类型信息的.使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉.这个过程就称为类型擦除. 如在代码中定义的List<object>和List<

VC++库

c++     大量的程序员都尽可能多地利用现有的代码.程序员经常购买那些包装成库的代码,而且许多成功的公司正是靠生产真正优秀的代码库而发展起来的,例如Rogue WaveSoftware (www.roguewave.com).    当C语言流行时,代码库就是函数库.例如,可以购买一个数学库,该库含有完成微积分和代数运算的函数.通常,可以在程序代码中使用一个包含文件来指定一个函数库,可以静态或动态地链接这个函数库.    静态链接意味者库代码直接集成到程序中.在这种情况下,程序不依赖于其他文

使用 &amp;lt;multimap&amp;gt; 库创建重复键关联容器

摘要:标准库的 multimap 容器与 map 关联容器非常类似--但是, multimap 允许重复键.这个特性使得 multimap 比想象的要有用得多.本文将对之进行探讨 . 在"使用 <map> 库创建关联容器"一文中,我们讨论了标准库 中的 map 关联容器.但那只是 map 容器的一部分.标准库还定义了一个 multimap 容器, 它与 map 类似,所不同的是它允许重复键.这个属性使得 multimap 比预想的要更有用:比 如在电话簿中相同的人可以有两个

使用 &amp;lt;map&amp;gt; 库创建关联容器

摘要:当索引是整型,那么将值与之关联并不难,但如果数据的关联值对是其它数据类型怎么办呢?<map>库具备一个关联容器,使用它可以很方便地关联所有类型的数据对.本文将讨论 <map> 库的使用方法和技巧. 关系数据库,科学计算应用以及基于Web的系统常常需要类似 vector 的容器,其索引可以是如何数据类型,不一定是整数.这样的容器叫关联容器,或者 map.例如,目录服务应用可以将私人姓名作为索引来存储,电话号码作为其关联的值: directory["Harry"

用C++写的CGI程序

经过前面的学习,大家应该能够根据例子用ANSI C为自己的服务器写出CGI程序.之所以选用ANSI C,是因为它几乎随处可见,是最流行的C语言标准.当然,现在的C++也非常流行了,特别是采用GNU C++编译器(g++)形式的那一些(注释④).可从网上许多地方免费下载g++,而且可选用几乎所有平台的版本(通常与Linux那样的操作系统配套提供,且已预先安装好).正如大家即将看到的那样,从CGI程序可获得面向对象程序设计的许多好处. ④:GNU的全称是"Gnu's Not Unix".这

Microsoft CryptoAPI加密技术(二)

上次我们讲了Microsoft CryptoAPI的构成以及会话密钥的使用.接下来我们将看一下公私密钥对的使用.HASH算法.数字签名等技术. 一. 公用密钥加密技术 公用密钥加密技术使用两个不同的密钥:公钥和私钥.私钥必须安全的保管好不能被外人知道,而公钥可以告诉任何人,只要他需要.通常公钥是以数字证书的形式发布的. 用公私密钥对中的一个密钥加密的数据只能用密钥对中的另一个密钥才能解密.也就是说用用户A的公钥加密的数据只能用A的私钥才能解密,同样,用A的私钥加密的数据只能用A的公钥才能解密.

ViewState机制由浅入深1

1 ViewState机制是什么? ViewState机制是asp.net中对同一个Page的多次请求(PostBack)之间维持Page及控件状态的一种机制.在WebForm中每次请求完,Page对象都会被释放,对同一个Page的多次请求之间的状态信息,如何进行维护呢?WebForm中,每次请求都会存在客户端和服务器之间的一个交互.如果请求完成之后将一些信息传回到客户端,下次请求的时候客户端再将这些状态信息提交给服务器,服务器端对这些信息使用和处理,再将这些信息传回给客户端.这样是不是就可以对

我们来谈谈面向指针编程的那些事

面向对象编程,面向设计模式编 程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数式编程),面向多核时代的并行编程,面向大数据的机器学习编 程--这么多年,大家要面向的东西已经够多了,然而我看到的现象是,很多编程语言让大家面向 xxx 的同时在竭力回避指针.我可不想面向这么多东西,所以我只好加入指针的黑暗势力.我要不自量力的来写一篇<面向指针编程>作为投名状,借以表示我与软件世 界的光明势力的彻底决裂. 这个世界上,提供指针的编程语言很少,这样的语言有汇编语言