用+运算符添加std :: pair

时间:2014-02-22 15:11:16

标签: c++ stl

在以下示例中,有一种简单的方法可以使+ b工作:

#include <utility>
#include <iostream>

int main ()
{
    std::pair<int, int> a=std::make_pair(1,2);
    std::pair<int, int> b=std::make_pair(3,3);
    std::pair<int, int> c = a+b;

    return 0;
}

4 个答案:

答案 0 :(得分:12)

template <typename T,typename U>                                                   
std::pair<T,U> operator+(const std::pair<T,U> & l,const std::pair<T,U> & r) {   
    return {l.first+r.first,l.second+r.second};                                    
}                                                                                  
int main ()                                                                        
{                                                                                  
    std::pair<int, int> a=std::make_pair(1,2);                                     
    std::pair<int, int> b=std::make_pair(3,3);                                     
    std::pair<int, int> c = a+b;                                                   

    return 0;                                                                      
}  

您还可以使用更多模板类型来支持添加两种不同类型。现在它支持添加第一个和第二个不同类型的对,但是两个对和返回必须具有相同的类型。

如果你想让这个功能变得多功能,你可以做到这一点

template <typename T,typename U, typename V,typename W>                            
auto operator+(const std::pair<T,U> & l,const std::pair<V,W> & r)                  
-> std::pair<decltype(l.first+r.first),decltype(l.second+r.second)>                
{                                                                                  
    return {l.first+r.first,l.second+r.second};                                    
} 

在c ++ 14中,如果明确返回一对,则可以使用auto而不是尾随返回类型。

答案 1 :(得分:2)

您可以为二进制+运算符定义覆盖,专门用于pair<int, int>参数:

std::pair<int, int> operator +(const std::pair<int, int>& x, const std::pair<int, int>& y) {
    return std::make_pair(x.first + y.first, x.second + y.second);
}

答案 2 :(得分:1)

试试这段代码:

#include <utility>
#include <iostream>
namespace
{
    std::pair<int,int> operator+(const std::pair<int,int> &a ,const  std::pair<int,int> &b )
    {
        return std::make_pair(a.first+b.first,a.second+b.second);
    }
}

int main ()
{
    std::pair<int, int> a=std::make_pair(1,2);
    std::pair<int, int> b=std::make_pair(3,3);
    std::pair<int, int> c = a+b;

    std::cout<<c.first<<"  "<<c.second;

    return 0;
}

答案 3 :(得分:1)

是的,您可以像这样重载运算符+

#include <utility>
#include <iostream>

std::pair<int,int> operator+(const std::pair<int, int>& x, const std::pair<int, int>& y) {
    return std::make_pair(x.first+y.first, x.second+y.second);
}

int main ()
{
    std::pair<int, int> a=std::make_pair(1,2);
    std::pair<int, int> b=std::make_pair(3,3);
    std::pair<int, int> c = a+b;

    std::cout << "c= ("<<c.first<<", "<<c.second<<")"<<std::endl;

    return 0;
}

会给你这个:

./a.out 
c= (4, 5)