c++ - Creating a composite type from two enum classes, ready for STL map -


i create composite type out of 2 enum classes.

enum class color {red, green, blue}; enum class shape {square, circle, triangle};  class object {   color color;   shape shape; public: }; 

in order use object in stl container std::map<> need overload less-than operator. however, in order flatten both enum classes 1 linear index somehow need number of elements (noe) of enum classes:

friend bool operator< (const object &lhs, const object &rhs) {   return noe(shape)*lhs.color+lhs.shape < noe(shape)*rhs.color+rhs.shape; } 

how can done without entering same information (number of elements) in 2 places in program in nice way? (nice way means no first_element, last_element, preprocessor magic, etc.)

question (number of elements in enum) similar not address enum classes.

i know best way implement kind of composite types in c++11. enum class definition strong enough, or necessary say:?

enum class color {red=0, green=1, blue=2}; enum class shape {square=0, circle=1, triangle=2}; 

as commented , stated others, give precedence either shape or color in operator< , compare other if first equal. alternative implementation operator< using std::tie:

#include <tuple> friend bool operator<(const object& lhs, const object& rhs) {     return std::tie(lhs.color, lhs.shape) < std::tie(rhs.color, rhs.shape); } 

Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -