User Tools

Site Tools


programming:cpp:class

This is an old revision of the document!


自作クラス

クラスを自作する必要がある際に考えること

unordered_map などの key に使う際には 'operator==' と hash 関数のオーバーロードが,
ordered なコンテナの key に使う際には'operator<' のオーバーロードが必要

例えば int と double をもつクラスをキーとして使う場合は,

MyClass.hpp
#ifndef MYCLASS_HPP
#define MYCLASS_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
MyClass.cpp
#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 の定義

programming/cpp/class.1650272613.txt.gz · Last modified: 2022/04/18 09:03 by odagawa