#include <iostream>

struct Monsters
{
    public:
		int Damage;
		int PowerUp;
		int Monster_Strength;
		int hp;
		int lvl;
		int money;
		int defense;
};

#include <tuple>

bool operator== ( const Monsters& a, const Monsters& b ) // C++11
{
    static const auto to_tuple = [] ( const Monsters& m )
    {
        return std::make_tuple( m.Damage, m.PowerUp, m.Monster_Strength, m.hp,
                                m.lvl, m.money, m.money, m.defense ) ;
    };
    return to_tuple(a) == to_tuple(b) ;
}

// principle of least surprise
bool operator!= ( const Monsters& a, const Monsters& b ) { return !(a==b) ; }

int main()
{
    Monsters m11 = { 23, 2, 5, 8, 19, 7, 9 } ;
    if( m11 == Monsters{ 23, 2, 5, 8, 19, 7, 9 } ) std::cout << "ok\n" ; // C++11
    if( m11 != Monsters{ 23, 2, 5, -9, 19, 7, 9 } ) std::cout << "ok\n" ; // C++11
}
