在以下示例中,有一种简单的方法可以使+ 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;
}
答案 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)