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

c++ access same elements in more than one way

本文关键字:元素 访问 方式 c++      更新时间:2023-10-16

我的Item类如下所示:

class Item {
    int unique_key;
    long property;
};

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

我在想这样的事情:

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

但我想知道是否有其他更好的解决方案,使用更少的内存,避免保持映射同步

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

std::mapstd::multi_map都没有常量时间访问元素,它们都是O(lg N)。如果你需要常量访问,你必须使用std::unordered_mapstd::unordered_multimap,它们都是c++ 11中引入的容器。

如果你没有访问c++ 11编译器,那么就没有字典/哈希表容器是常量时间访问的。

然而,如果unique_key s以这样的方式生成,使它们为0…N, property s也为0…M,对于某个N M,那么你可以简单地有:

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

如果您有一个密集的id集合,那么它将具有恒定的访问并且是最有效的解决方案。但是,如果id集合是稀疏的(例如,可能您有id 0、500和1000万),那么这种解决方案就很糟糕。