Consider the following class:
class SocialPrefNode{
public:
// Constructors & Destructor
SocialPrefNode( );
SocialPrefNode( char self, int ind, int link, bool stack, std::vector<SocialPrefNode*> pref,
std::vector<SocialPrefNode*> worse, std::vector<SocialPrefNode*> indiff );
SocialPrefNode( const SocialPrefNode& copy );
~SocialPrefNode( );
// Setters
void set_id( char self );
void set_index( int ind );
void set_lowlink( int link );
void set_onstack( bool stack );
void set_pref( std::vector<SocialPrefNode*> prefs );
void set_pref( SocialPrefNode& prefs );
void set_worse( std::vector<SocialPrefNode*> wrs );
void set_worse( SocialPrefNode& wrs );
void set_indiff( std::vector<SocialPrefNode*> indiff );
void set_indiff( SocialPrefNode& indiff );
// Getters
char get_id( ){ return id; }
int get_index( ){ return index; }
int get_lowlink( ){ return lowlink; }
bool get_onstack( ){ return onstack; }
std::vector<SocialPrefNode*> get_preferences( ){ return preferences; }
std::vector<SocialPrefNode*> get_worse( ){ return worsethan; }
std::vector<SocialPrefNode*> get_indiff( ){ return indifference; }
// Operators
SocialPrefNode& operator=( const SocialPrefNode& copy );
private:
char id{ };
int index{ };
int lowlink{ };
bool onstack{ };
std::vector<SocialPrefNode*> preferences{ };
std::vector<SocialPrefNode*> worsethan{ };
std::vector<SocialPrefNode*> indifference{ };
};
std::ostream& operator<<( std::ostream& os, SocialPrefNode& node );
Question: Is there a way to overload/override/redefine the subscript operator s.t. one can, for example, have access to a vector of choice, among the three options.
I.e., suppose: SocialPrefNode ordering{ }. I want to be able to use the subscript operator as in ordering[ i ] AND be able to choose one, among the three vectors in the class, for the subscript/index i to act up on.
Example: one wants to access the third element in the preferences vector of a SocialPrefNode ordering. Then, one does ordering[ 2 ] and, thus, have access to the desired element.
ordering, the subsripti, and... where is the type of container to search in?operator[]that takes 0-2 and returns astd::vector<SocialPrefNode*>(either preferences or worsethan or indifference). Of course that would require a multi dimensional subscript likex[0][2]for element 2 in vector 0. Or you could have a wrapper type for the index so that the wrapper comes with the information which vector to read.