运算符在c ++中重载一组

时间:2014-03-13 22:20:06

标签: c++ set overloading operator-keyword

所以我创建了一个名为Tuples的新类,其中Tuples接受一个名为tupleVector的字符串向量。然后我创建了一组元组,这意味着我需要重载命令元素所需的运算符并禁止重复。

两个问题:

  1. 哪个操作员过载是必要的?我是否超载<或==?
  2. 假设我必须在我的Tuples类中执行此重载(所以我可以在其他类中使用元组集),以下代码是否正确?

    include "Tuples.h"
    Tuples::Tuples(vector<string> tuple){
        tupleVector = tuple;
    }
    vector<string> Tuples::getStrings()
    {
        return tupleVector;
    }
    bool Tuples::operator<(Tuples& other){
        return this->tupleVector<other.tupleVector;
    }
    bool Tuples::operator==(const Tuples& other)const{
        return this->tupleVector==other.tupleVector;
    }
    Tuples::~Tuples() {
        // TODO Auto-generated destructor stub
    }
    

3 个答案:

答案 0 :(得分:2)

您只需提供operator<即可。容器通过反复比较来检查两个项是否相等:如果!(a<b) && !(b<a)

,它们是等效的

答案 1 :(得分:0)

假设您想使用std::sort对内存中的连续区域(Tuples类型的对象的数组或标准容器)进行排序:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

您应该为您的班级operator<重载Tuples,或者提供适当的函子。

  

按升序对[first,last]范围内的元素进行排序。该   不保证保持相等元素的顺序。首先   版本使用运算符&lt;比较元素,第二个版本   使用给定的比较函数对象comp。

不需要

operator==,因为它可以通过调用operator<的标准排序算法轻松模拟:

!( a < b) && !( b < a)

答案 2 :(得分:0)

这取决于您喜欢使用自己类型的类。如果您计划在许多地方使用该类,您应该重载整个运算符集。但是你可以通过调用一些自己的运算符来实现大多数其他运算符:

bool operator==( const T &t ) const {
    // Implementation
}

要实施!=运营商,只需致电==运营商。

bool operator!=( const T &t ) const {
    return !operator==(t);
}

类似地,您可以通过调用<=>运算符轻松实现>===<运算符。