C++ 在通用容器中查找特定实现

C++ 在通用容器中查找特定实现,c++,c++11,generics,C++,C++11,Generics,我有一个装有a-s的容器 B、 C,D,E。。。实施A 例如,查找第一个C对象的最有效和最安全的方法是什么?(第一个对象的类型是C) 我考虑过使用无序映射,但是字符串不是很安全,因为它们只在运行时检查。知道哪种方法更有效的唯一方法是在您的平台上测试它并测量时间,比较不同的解决方法 例如,我建议使用枚举来加速树的搜索和索引 enum objType { A = 1, B, C, D }; 容器可能应为: unordered_map < objType, A* &g

我有一个装有a-s的容器

B、 C,D,E。。。实施A

例如,查找第一个C对象的最有效和最安全的方法是什么?(第一个对象的类型是C)


我考虑过使用无序映射,但是字符串不是很安全,因为它们只在运行时检查。

知道哪种方法更有效的唯一方法是在您的平台上测试它并测量时间,比较不同的解决方法

例如,我建议使用枚举来加速树的搜索和索引

enum objType
{
   A = 1,
   B,
   C,
   D
};
容器可能应为:

 unordered_map < objType, A* >
unordered_map

但如果需要存储一个以上类型的对象,则应该考虑使用MultMAPP

 unordered_multimap < objType, A* >
无序的多重映射
您的意思是查找类型为
C
的第一个元素吗?或者包含
C
?的第一个元素,您希望通过它实现什么?您想要解决的实际问题和原始问题是什么?难道不能用虚拟函数和多态性来解决吗?最后是一些,对不起。我想在实体上实现一个组件系统。我想访问实体的一个特定组件。例如,字符串引用的是已实现实体的类型?是的,一个解决方案是这样的,但是字符串只在运行时检查,所以它们不是非常安全。我建议使用
std::type_index
。如果我想存储2个B-s呢?将有两个值具有相同的键。这是可能的吗?您是rigth,容器属性,“容器中的任何两个元素都不能有相同的键。”也许您可以使用另一个容器,或者为所有B-s使用嵌套容器。