所以我创建了一个名为Tuples的新类,其中Tuples接受一个名为tupleVector的字符串向量。然后我创建了一组元组,这意味着我需要重载命令元素所需的运算符并禁止重复。
两个问题:
假设我必须在我的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
}
答案 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);
}
类似地,您可以通过调用<=
和>
运算符轻松实现>=
,==
,<
运算符。