Boost Multi Index标识索引
Boost Multi Index Identity index
我正在尝试为multi_index_container制作一些包装器类。
基本上我只想导出这些操作:
- 插入元素
- Remove Element(for a given Element)
- 按键获取元素
typedef boost::multi_index::multi_index_container<
SR, boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<boost::multi_index::tag<SR::ByIdentity>,boost::multi_index::identity<SR> >
, boost::multi_index::ordered_unique< boost::multi_index::tag<ByName>,boost::multi_index::const_mem_fun<SR,const std::string&
, &SR::GetName> >
, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ByID>,boost::multi_index::const_mem_fun<SR, ID
, &SR::GetID> >
>
> SRs;
地点:
SR::ByIdentity
内部空结构
ByName
和ByID
是预定义的空结构体。
是SR
中定义的函数ID SetID(ID ID);
ID GetID() const;
void SetName(const std::string& name);
const std::string& GetName() const;
,这是插入,删除和获取的代码
bool Insert(ElementType val)
{
return m_container.insert(val).second;
}
void Remove(ElementType val)
{
iterator It = m_container.get<ByIdenetity>().find(val);
if (It != m_container.end())
{
m_container.erase(It);
}
}
template<typename Iterator> const_iterator Get(typename Iterator::mtype val) const
{
typename Iterator::iterator::const_iterator It = m_container.get<typename Iterator::index>().find(val);
return It;
}
其中typename Iterator
定义为
struct IdentityIterator
{
typedef ByIdentity index;
typedef SR mtype;
typedef SRs::index<ByIdentity>::type iterator;
} ;
struct NameIterator
{
typedef ByName index;
typedef const std::string& mtype;
typedef SRs::index<ByName>::type iterator;
} ;
struct NameIterator
{
typedef ByID index;
typedef ID mtype;
typedef SRs::index<ByID>::type iterator;
} ;
我得到以下编译错误:
In member function ?€˜typename ContainerType::const_iterator ns1::ContainerWrapper<ContainerType>::get(typename Iterator::mtype) const [with Iterator = ns2::NameIter, ContainerType = boost::multi_index::multi_index_container<ns2::SR, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns2::ByIdentity, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::identity<ns2::SR>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<ns2::ByName, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::const_mem_fun<ns2::SR, const std::string&, &ns2::SR::GetName>, mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns2::ByID, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::const_mem_fun<ns2::SR, int, &ns2::SR::GetRoleID>, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<ns2::SR> >]?€™:
ns3/testFile.cpp:509: instantiated from here
../ns1/ContainerWrapper.h:114: error: conversion from ?€˜boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns2::SR, std::allocator<ns2::SR> > > > >?€™ to non-scalar type ?€˜boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns2::SR, std::allocator<ns2::SR> > > > > >?€™ requested
当我删除boost::multi_index::ordered_unique<boost::multi_index::tag<SR::ByIdentity>,boost::multi_index::identity<SR> >
任何想法?
您的Get
成员函数在应该返回Iterator::iterator::const_iterator
时返回了一些const_iterator
。
相关文章:
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 将转换字符键入 int 以用作向量C++的索引
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 如何为圆环创建索引
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 查找字符在两个索引之间出现的次数
- Azure Kinect 使用正文索引映射裁剪正文
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 数组索引重载错误
- Boost Multi Index标识索引