Question

I want to implement inside boost multi-index two sets of keys with same search criteria but different eviction criteria. Say i have two sets of data with same search condition, but one set needs a MRU(Most Recently Used) list of 100 and the other set requires a MRU of 200. Say the entry is like this

class Student
{
     int student_no;
     char sex;
     std::string address;
};

The search criteria is student_no, but for sex='m', we need MRU of 200 and for sex='f', we need a MRU of 100. Now i have a solution where in i introduce a new ordered index to maintain ordering.

For example the IndexSpecifierList will be something like this

typedef multi_index_container<
  Student,
  indexed_by<
    ordered_unique< member<Student, int, &Student::student_no> >,
    ordered_unique< composite_key<
                    member<Student, char, &Student::sex>,
                    member<Student, int,  &Student::sex_specific_student_counter> > >
  > 
> student_set 

Now everytime, i am inserting a new one, i have to take a equal_range for that using index 2 and remove the oldest one and if something is getting re-used, i have to update it by incrementing the counter.

Is there a better solution to this kind of problem?

Thanks, Gokul.

Was it helpful?

Solution

It is possible to do the same with sequenced in place of the second index and holding the iterator which splits the male and female as a cached one. This helps is with the same behavior.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top