【发布时间】:2013-09-04 08:33:08
【问题描述】:
我有一个带有“array of array”私有成员的类,表示为:
std::deque<std::deque<SomeClass> > someArray_;
这个类还有一个公共方法,允许接收所有唯一的SomeClass 实例,包含在someArray_ 中。 SomeClass 实例的唯一性意味着多个类成员中的至少一个不同。为此,我决定使用std::set。该方法的原型如下:
std::set<SomeClass> getAllUniqueInstances() const;
在这个方法实现中,我使用以下构造来填充std::set:
std::set<SomeClass> allUniqueInstances;
for(auto it = std::begin(someArray_); it != std::end(someArray_); ++it){
std::copy((*it).begin(),
(*it).end(),
std::inserter(allUniqueInstances, allUniqueInstances.end()));
}
operator<() 是为 SomeClass 类定义的。结果我的std::set 被填充了,但是大量的实例被遗漏了。 Modyfing operator<() for SomeClass 类,改变了情况,但破坏了理想的排序顺序。在这种情况下std::copy 如何判断大量实例是否唯一?
UPD:SomeClass的源代码
class SomeClass{
private:
uint32_t from_;
uint32_t to_;
double capacity_;
double flow_;
public:
...
bool operator<(const SomeClass& rhs) const;
...
};
我希望SomeClass 实例按from_ 成员的集合排序:
bool SomeClass::operator<( const SomeClass& rhs ) const{
if(this->from_ < rhs.from_)
return true;
return false;
}
【问题讨论】:
-
如果您要为
SomeClass写一个operator==,您认为必要的属性是什么?只是from_?