【发布时间】:2014-09-08 11:29:30
【问题描述】:
我有一堂课myClass。 myClass 对象有一个(人类可读的)名称,以及更多信息。
class myClass
{
std::string name;
int attribute;
int anotherAttribute;
}
它们存储在 STL 容器中,例如 vector。
std::vector<myObject> myList;
当客户端想要访问一个元素时,它会通过名称来执行此操作。这意味着,我必须遍历整个向量才能找到正确的对象(容器包含大约几百个对象)。
所以,我正在考虑将std::map 作为容器,而不是vector。据我了解,当按名称而不是索引访问元素时,地图应该是首选容器。
但是,对象的名称会存储两次,一次作为映射键,一次存储在对象本身中。内存开销应该没问题,但我想知道这是否是一个好习惯。可能存在名称不同步的问题(出于某种神秘原因)。我什至考虑过删除myClass 的name 成员。
简而言之:我应该使用什么容器,为什么?
【问题讨论】:
-
您可以按名称对
std::vector<myObject>元素进行排序并使用二分查找,顺便说一下,二分查找的时间复杂度与std::map相同。 -
如果你使用 C++11,你可以使用
std::unordered_map,这是一个哈希映射实现。然后从 myClass 中删除name属性,因为无论如何您都可以通过地图获得它。
标签: c++ vector map stl containers