次のように表される「配列の配列」プライベートメンバーを持つクラスがあります。
std::deque<std::deque<SomeClass> > someArray_;
SomeClass
また、このクラスには、に含まれるすべての一意のインスタンスを受け取ることができる public メソッドがありますsomeArray_
。インスタンスに対して一意とSomeClass
は、複数のクラス メンバーのうちの少なくとも 1 つが異なることを意味します。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
データが取り込まれますが、大量のインスタンスが失われます。クラスのModyfingoperator<()
は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;
}