c ++以多种方式访问​​相同的元素

时间:2015-07-29 14:48:34

标签: c++ dictionary std

我的Item课程如下所示:

class Item {
    int unique_key;
    long property;
};

我有一个或多个项目,我需要在unique_key(每个项目不同)和property(更多项目可以具有相同属性)的常量O(1)时间内访问它们

我正在考虑这样的事情:

std::map<int, Item*> my_map1;
std::multimap<long, Item*> my_map2;

但我想知道是否有更好的解决方案使用更少的内存并避免使地图保持同步。

1 个答案:

答案 0 :(得分:3)

  

我需要在恒定的O(1)时间内访问它们

std::mapstd::multi_map都没有元素的恒定时间访问权限,两者都是O(lg N)。如果您需要持续访问,则必须使用std::unordered_mapstd::unordered_multimap,这两个容器都是在C ++ 11中引入的。

如果您无法访问C ++ 11编译器,那么就没有可以进行常量时间访问的字典/哈希表容器。

但是,如果以这样的方式生成unique_key,使得它们为0 ... N,并且property s也为0 ... M,对于某些N,M ,那么你可以简单地:

std::vector<Item*> my_map1;
std::vector<std::vector<Item*>> my_map2;

如果您拥有密集的ID集合,那么它将具有持续访问权限并且是最有效的解决方案。但是如果ID的集合很稀疏(例如,你可能有0,500和1000万的id),那么这个解决方案很糟糕。