添加标准::p空气和 + 运算符

Add std::pair with + operator

本文关键字:运算符 标准 添加 空气      更新时间:2023-10-16

在以下示例中,有没有一种简单的方法可以使 a+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;
}
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 而不是尾随返回类型。

您可以

为二进制+运算符定义覆盖,该运算符专用于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);
}

试试这段代码:

#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;
}

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

#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)