对不起,我不能在标题中更具体。
假设我有一个班级 Foo
class Foo {
public:
Foo() { m_bitset.reset(); }
void set_i(int i) {
m_bitset.set(1);
m_i = i;
}
void set_j(int j) {
m_bitset.set(2);
m_j = j;
}
bool i_set() { return m_bitset(1); }
bool j_set() { return m_bitset(2); }
void clear_i() { m_bitset.reset(1); }
void clear_j() { m_bitset.reset(2); }
int get_i() {
assert(i_set());
return m_i;
}
int get_j() {
assert(j_set());
return m_j;
}
private:
int m_i, m_j;
bitset<2> m_bitset;
};
现在我想把 Foo 放到一个 multi_index 中。
typedef multi_index_container <
Foo,
indexed_by<
ordered_non_unique<BOOST_MULTI_INDEX_CONST_MEM_FUN( Foo, int, get_i)
>,
ordered_non_unique<BOOST_MULTI_INDEX_CONST_MEM_FUN( Foo, int, get_j)
>
>
> Foo_set;
我想要弄清楚的是一种让我的 multi_index 对具有有效值 i 或 j 的 Foo 进行排序的方法(或者在复合键的情况下两者都传递并传递其余部分。所以我不想要下面的代码要炸毁,我只想返回对 i 具有有效值的 foo。
for (Foo_set::nth_index<1>::type::iterator it = foos.get<1>().begin(); it != foos.get<1>().end(); ++it)
cout << *it;