This is an old revision of the document!
クラスを自作する必要がある際に考えること
unordered_map などの key に使う際には
'operator==' と hash 関数のオーバーロードが,
ordered なコンテナの key に使う際には'operator<' のオーバーロードが必要
例えば int と double をもつクラスをキーとして使う場合は,
#ifndef MYCLASS_HPP #define MYCLASS_HPP #include <cstddef> #include <boost/functional/hash.hpp> class MyClass { public : int var1; double var2; bool operator==(const MyClass &rhs) const; bool operator<(const MyClass &rhs) const; friend std::size_t has_value(const MyClass &obj) { std::size_t h = 0; boost::hash_combine(h, obj.var1); boost::hash_combine(h, obj.var2); return h; } }; #endif
#include "MyClass.hpp" bool MyClass::operator==(const MYClass &rhs) const { return var1 == rhs.var1 && var2 == rhs.var2; } bool MyClass::operator<(const MyClass &rhs) const { if ( var1 != rhs.var1 ) return var1 < rhs.var1; return var2 < rhs.var2 }
stream の定義