【发布时间】:2015-02-08 22:34:30
【问题描述】:
我正在使用 boost multi_index_container,它由 equal_range 查询,并使用 range::join 和 boost::any_range 从函数返回结果
any_range Reference 参数被定义为对类型的 const 引用 - 由于 multi_index_container 的性质,必须是 const,对引用不太确定。示例:
typedef boost::any_range<TestData, boost::random_access_traversal_tag,
const TestData &, std::ptrdiff_t> TestRange;
现在我需要使用变异范围算法,例如 boost::sort、unique 等,由于范围内元素的常量性,这些算法显然无法在范围内运行。
除了将元素复制到新容器中之外,还有其他解决方法吗?
编辑 1:
struct 和 MIC 示例:
struct TestData {
TestData()
: m_strMem01("test"), m_intMem02(rand()),
m_boolMem03(rand() < RAND_MAX / 2) {}
std::string m_strMem01;
int m_intMem02;
bool m_boolMem03;
};
typedef boost::multi_index_container<
TestData,
bmi::indexed_by<
bmi::random_access<bmi::tag<struct RndKey1>>,
bmi::ordered_non_unique<
bmi::tag<struct Key1>,
bmi::composite_key<
TestData,
bmi::member<TestData, std::string, &TestData::m_strMem01>,
bmi::member<TestData, bool, &TestData::m_boolMem03>>>,
bmi::ordered_non_unique<
bmi::tag<struct Key4>,
bmi::composite_key<
TestData,
bmi::member<TestData, std::string, &TestData::m_strMem01>,
bmi::member<TestData, bool, &TestData::m_intMem02>>>,
bmi::ordered_non_unique<
bmi::tag<struct Key2>,
bmi::member<TestData, int, &TestData::m_intMem02>>,
bmi::ordered_non_unique<
bmi::tag<struct Key3>,
bmi::member<TestData, bool, &TestData::m_boolMem03>>>>
TestDataContainer;
【问题讨论】:
-
您无法真正对 MIC 进行排序。但是 MIC 会保持自己的排序,这就是您首先要付出的代价:)(您可以重新排列 RA 索引。)
标签: c++ algorithm boost boost-multi-index boost-range