1

我想在 boost 多索引中实现两组具有相同搜索条件但不同驱逐条件的键。假设我有两组具有相同搜索条件的数据,但一组需要 100 的 MRU(最近使用)列表,另一组需要 200 的 MRU。假设条目是这样的

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

搜索条件是 student_no,但是对于 sex='m',我们需要 200 的 MRU,对于 sex='f',我们需要 100 的 MRU。现在我有一个解决方案,其中我引入了一个新的有序索引来维护排序.

例如 IndexSpecifierList 将是这样的

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 

现在每次我插入一个新的,我必须使用索引 2 为它取一个 equal_range 并删除最旧的一个,如果有东西被重新使用,我必须通过增加计数器来更新它。

这类问题有更好的解决方案吗?

谢谢,戈库尔。

4

1 回答 1

0

可以用 sequenced 代替第二个索引并持有将男性和女性拆分为缓存的迭代器来做同样的事情。这有助于相同的行为。

于 2010-12-28T03:46:47.063 回答