gpt4 book ai didi

c++ - boost Multi_Index 问题

转载 作者:太空狗 更新时间:2023-10-29 22:52:53 25 4
gpt4 key购买 nike

抱歉,我不能在标题中更具体。

假设我有一个类 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 进行排序(或者在 composite_key 的情况下两者都有,并传递其余的。所以我不希望下面的代码崩溃,我只想返回对 i 具有有效值的 foos。

for (Foo_set::nth_index<1>::type::iterator it = foos.get<1>().begin(); it != foos.get<1>().end(); ++it)
cout << *it;

最佳答案

通过浏览 boost multi_index 库文档,我会说这个库无法满足您的需求。看着它的rationale它似乎仅用于索引在所有“维度”上完全可索引的元素。 (您可以尝试在 boost users 邮件列表上询问是否有任何黑客允许“稀疏”索引维度。)

无论如何 - 根据您问题的确切性质,您可以通过使用 boost::optional 作为索引类型来解决它。 (尽管我什至不确定是否可以通过 boost::optional 进行索引。)

关于c++ - boost Multi_Index 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com