Я использую boost multi_index_container, который запрашивается с помощью equal_range, а результат возвращается функцией с помощью range::join и boost::any_range
Аргумент ссылки any_range определяется как константная ссылка на тип — должен быть константным из-за характер multi_index_container, не совсем уверен в ссылке. Пример:
typedef boost::any_range<TestData, boost::random_access_traversal_tag,
const TestData &, std::ptrdiff_t> TestRange;
Теперь мне нужно использовать алгоритмы мутирующего диапазона, такие как boost::sort, unique и т. д., которые, очевидно, не могут работать в диапазоне из-за постоянства элементов в диапазоне.
Есть ли какой-либо обходной путь, кроме копирования элементов в новый контейнер?
РЕДАКТИРОВАТЬ 1:
структура и пример 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;