我有一大堆对象(可能有 1000 个),我需要将它们存储在一个容器中。我需要能够以两种方式找到特定实例,或者通过其 ID 号(64 位无符号整数)或它的名称(std::string)。通常通过 ID 将是最常见的,但在某些情况下,名称是已知的,而不是 ID。
std::map 可以提供单个 <-> 值,但是我不确定是否有 2 组 std::map 容器,一组用于 Id,另一组用于字符串是这里的最佳方法。
编辑 - 修改代码和错误:
好的,我想我会尝试使用多索引,因为无论如何我都有提升,但是我似乎无法编译它,即使我已经完成它与文档中的完全相同,据我所知:(
测试代码:
namespace common
{
class MyBaseClass
{
public:
typedef boost::uint64_t Id;
//name and id are constant, at least for the period im intrested in
//when I want it in the container...
const std::string &getName()const{return name;}
Id getId()const{return id;}
...other stuff...
};
}
class MyClass : public common::MyBaseClass
{
...other stuff...
};
typedef boost::multi_index_container
<
MyClass*,
boost::indexed_by
<
boost::ordered_unique<boost::const_mem_fun<MyBaseClass, MyBaseClass::Id, &MyBaseClass::getId > >,
boost::ordered_unique<boost::const_mem_fun<MyBaseClass, const std::string&, &MyBaseClass::getName> >
>
>MyClassList;
和你的平均提升模板错误......
c:\lib\c++\boost\boost\aligned_storage.hpp(69) : 错误 C2872: 'detail' : 不明确的符号
可能是 'boost::detail'
或 'boost::multi_index::detail'
c:\lib\ c++\boost\boost\multi_index\detail\index_node_base.hpp(42) : 请参阅
使用
[
size_=4,
alignment_=4
]
c:\lib\c++\boost\编译的类模板实例化 'boost::aligned_storage' 的参考boost\multi_index\detail\index_node_base.hpp(47) :参见类模板实例化的参考 'boost::multi_index::detail::pod_value_holder'
使用
[
Value=MyClass *
]编译
c:\lib\c++\boost\boost\multi_index\detail\ord_index_node.hpp(582) :参见
使用
[
Value=MyClass *,
Allocator编译的类模板实例化 'boost::multi_index::detail::index_node_base' 的参考=std::allocator
]
c:\lib\c++\boost\boost\multi_index\ordered_index.hpp(137) : 请参见
使用
[
Super=编译的类模板实例化 'boost::multi_index::detail::ordered_index_node' 的参考boost::multi_index::detail::index_node_base>
]
c:\lib\c++\boost\boost\multi_index\ordered_index.hpp(119) :参见
使用
[
KeyFromValue=boost::multi_index::编译的类模板实例化 'boost::multi_index::detail::ordered_index' 的参考const_mem_fun,
Compare=std::less,std::allocator>>,
SuperMeta=boost::multi_index::detail::nth_layer<2,MyClass *,boost::multi_index::indexed_by>,boost::multi_index::ordered_unique >>,std::allocator>,
TagList=boost::mpl::vector0,
Category=boost::multi_index::detail::ordered_unique_tag
]
c:\lib\c++\boost\boost\multi_index_container.hpp(86) :参见
使用
[
KeyFromValue=boost::multi_index::const_mem_fun 编译的类模板实例化 'boost::multi_index::detail::ordered_index' 的参考,
比较=std::less,
SuperMeta=boost::multi_index::detail::nth_layer<1,MyClass *,boost::multi_index::indexed_by>,boost::multi_index::ordered_unique>>,std::allocator>,
TagList=boost::mpl::vector0,
Category=boost::multi_index::detail::ordered_unique_tag
]
c:\projects\bad_angle_studios\brak3\trunk\source\source\server\MyClass.cpp(18) :参见
使用
[
Value=MyClass *,
IndexSpecifierList=编译的类模板实例化 'boost::multi_index::multi_index_container' 的参考boost::multi_index::indexed_by>,boost::multi_index::ordered_unique>>
]
c:\lib\c++\boost\boost\aligned_storage.hpp(53) : 错误 C2872: 'detail' : 模棱两可的符号
可能是 'boost ::detail'
或 'boost::multi_index::detail'
c:\lib\c++\boost\boost\aligned_storage.hpp(56) : 参见类模板实例化 'boost::detail::aligned_storage::aligned_storage_imp: :data_t'正在编译
使用
[
size_=4,
alignment_=4
]
c:\lib\c++\boost\boost\aligned_storage.hpp(69) : 请参阅
使用
[编译的类模板实例化 'boost::detail::aligned_storage::aligned_storage_imp' 的引用
size_=4,
alignment_=4
]
c:\lib\c++\boost\boost\aligned_storage.hpp(73) : 错误 C2872: 'detail' : 不明确的符号
可能是 'boost::detail'
或 'boost::multi_index: :细节'
c:\projects\bad_angle_studios\brak3\trunk\source\source\server\MyClass.cpp(44) : error C2676: binary '[' : 'MyClassList' 未定义此运算符或转换为预定义可接受的类型操作员