对称矩阵的C ++容器和==运算符

时间:2013-08-15 10:09:07

标签: c++ data-structures matrix

以下是处理symmetrix矩阵的代码的一部分:

SymmetricMatrix<std::deque<int> > a(3);
SymmetricMatrix<std::list<int> > b(3);
SymmetricMatrix<std::vector<int> > c(4);
SymmetricMatrix<std::list<int> > d(3);

a(1,1) = b(1,1) = c(1,1) = d(1,1) = 7;
a(1,2) = b(2,1) = c(1,2) = d(2,2) = 3;

if(b == c) {}

您建议使用哪种容器或数据结构来实现SymmetricMatrix类? (我试过std::vector)另外,我怎么能实现==运算符?现在,它适用于b == d,但不适用于== b(no match for 'operator ==')。

1 个答案:

答案 0 :(得分:2)

==上未定义a == b的原因是因为类SymmetricMatrix<std::deque<int> >SymmetricMatrix<std::list<int> >属于不同类型。其中一个内部定义的运算符==将无法应用。

但是,C ++允许您定义“独立”运算符模板,如下所示:

template <typename T, typename U>
bool operator==(const SymmetricMatrix<T>& lhs, const SymmetricMatrix<U>& rhs) {
    // Do the comparison here
}

此运算符引用具有不同类型参数的SymmetricMatrix个对象,因此编译器将能够为a == b调用它。您可能需要在SymmetricMatrix模板中向此运算符声明“友谊”,以便让操作员访问矩阵类的私有成员和受保护成员。