c++中的工具(一):std::pair<class T1, class T2>&&<utility>

c++中的函数语法,只能有一个返回值,不像python一样,可以把多个返回值包装到一个元组中,如下

(x,y) = get_postion(value)

C++在标准库中定义了工具类std::pair<class T1, class T2>,使C++可以通过相似的方法支持返回两个值。pair的源码类似于:

namespace std {
    template <class T1, class T2>
    struct pair{
        typedef T1 first_type;
        typedef T2 second_type;

        T1 first;
        T2 second;

        pair():first(T1(), second(T2())){

        }

        pair(const T1&a, const T2&b):first(a),second(b){

        }

        template<class U, class V>
        pair(const pair<U,V>&p):first(p.first), second(p.second){

        }
    };

    template<class T1, class T2>
    bool operator==(const pair<T1, T2> &x, const pair<T1, T2> &y)
    {
        return x.first == y.first && x.second == y.second;
    }

    template<class T1, class T2>
    bool operator< (const pair<T1, T2> &x, const pair<T1, T2> &y)
    {
        return x.first < y.first || (!(x.first < y.first) && (x.second < y.second));
    }
// > != 等类似

    template<class T1, class T2>
    pair<T1,T2> make_pair(const T1&_first, const T2&_second)
    {
        return pair<T1,T2>(_first, _second);
    }
}

标准库中的std::pair<class T1, class T2>定义在头文件<utility>中。

std::pair<double, int> getPrice(double unit_price, int amount){
    return std::make_pair(unit_price, amount);
}

int main()
{
    std::pair<double, int> info;
    info = getPrice(3.5, 12);
    std::cout << info.first << ":" << info.second << endl;
}

在标准库中,容器map就用到了pair来保存自己的每一项。我们在访问map的元素时,可以通过pair类来访问key和value

#include <iostream>
#include <map>
#include <utility>

using namespace std;

int main()
{
    typedef map<string, float> StringFloatMap;
    StringFloatMap coll;

    coll["VAT"] = 0.15;
    coll["Pi"] = 3.1415;
    coll["an arbitrary number"] = 4983.223;
    coll["Null"] = 0;

    StringFloatMap::iterator pos;
    for(pos = coll.begin(); pos!=coll.end(); ++pos){
        cout << "key: \"" << pos->first << "\" "
             << "value: \"" << pos->second << "\" "<<endl;
    }
}

原文地址:https://www.cnblogs.com/mindulmindul/p/12150162.html

时间: 2024-10-10 18:00:43

c++中的工具(一):std::pair<class T1, class T2>&&<utility>的相关文章

STL std::pair基本用法

std::pair 是一个结构体模板,其可于一个单元内存储两个相异对象.是 std::tuple 的拥有两个元素的特殊情况. 一般来说,pair 可以封装任意类型的对象,可以生成各种不同的 std::pair<T1, T2> 对象,可以是数组对象或者包含 std::pair<T1,T2> 的 vector 容器.pair 还可以封装两个序列容器或两个序列容器的指针. 1. 定义 #include <utility> template<class T1, class

C++ std::pair的用法

1 pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair. pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量. 2 make_pair函数 template pair make_pair(T1 a, T2 b) { return pair(a

NDK使用技巧、多线程调用注意、ndk中的工具使用

//NDK 使用技巧和多线程调用注意 //http://www.ibm.com/search/csass/search/?q=ndk&sn=dw&lang=zh&cc=CN&en=utf&hpp=20&dws=cndw&lo=zh void demo(JNIEnv* env, jobject thiz) { //这JNI接口指针可以存储,但只在当前线程仍然是有效的. /* A JNI environment pointer (JNIEnv*) is

OpenCV入门教程之三模仿PhotoShop中魔术棒工具

本文的主题实际上是图像的颜色空间的转换,借助一个颜色选取程序来说明OpenCV中颜色转换函数的用法以及一些注意事项. 一.几种常见的颜色空间 RGB颜色空间:RGB采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色.光线从暗黑开始不断叠加 产生颜色.RGB描述的是红绿蓝三色光的数值.数字图像存储方面一般都是用RGB模式,值得注意的是OpenCV里三通道的存储顺序是BGR. HSV,HSI:这两个颜色格式都是根据人眼对颜色的区分来定义的格式,其中H(hue)表示色相,S(saturati

android ndk中的工具使用

1. 动态so处理: arm-linux-androideabi-readelf.exe -a XX.so > xx.txt 输出所有函数 arm-linux-androideabi-objdump.exe -dx XX.so > xx.txt 反汇编so包,此时使用 $(JNI_PROJ_PATH)/obj\local\armeabi下面带符号表的so包.JNI_PROJ_PATH为编译so包时jni文件夹的根目录 2. 静态a处理: arm-linux-androideabi-ar.exe

Navicat Premium 中实用工具介绍

数据库管理工具的种类有很多,其中,Navicat Premium非常的受广大的用户喜欢.因为,它为了改善用户的体验,特地提供了数种实用工具.而且其本身还支持单一程序同时连接到 SQLite.MariaDB.SQL Server.MySQL.Oracle 和 PostgreSQL数据库.并且其操作简单,即使是新手用户只要了解一些基础的教程也能很快的上手.下面我们就来给大家分享一下Navicat Premium 中实用工具介绍? 原文:http://www.formysql.com/jiqiao/p

怎样在几何画板中添加自定义工具

在使用几何画板的过程中,一些用户朋友发现在自定义功能里找不到绘图所需的基本图形,这样非常的麻烦.下面我们就来给大家介绍介绍怎样在几何画板中添加自定义工具? 1.首先,你需要下载一个装有各种自定义工具的文件夹:下载地址. 2.将下载的工具文件夹放到几何画板安装目录下,打开几何画板软件,在自定义工具点击“选择工具文件夹”. 3.在弹出的对话框中找到你放在安装目录下的工具文件夹,单击选中该文件,然后点击“选择”. 在安装目录找到工具文件夹“Tool Folder”并选择 4.稍等片刻会弹出添加成功的提

远程使用x-manager中Xstart工具报缺少xterm包错误

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45021981 操作系统:CentOS 7 安装oracle版本:Oracle12C 12.1.0.1 使用X-Manager中Xstart工具可以实现远程调用图形化界面,所以使用该工具远程连接linux系统. 方法一: (1).配置yum 略 (2).yum安装包 [

逆向中静态分析工具——IDA初学者笔记

逆向中静态分析工具--IDA初学者笔记 //******************************************************************************//IDA初学者笔记 //******************************************************************************//作者:Cai//日期:2011-10-18//**********************************