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

C++ c++;以多种方式访问相同的元素,c++,dictionary,std,C++,Dictionary,Std,我的Item类如下所示: class Item { int unique_key; long property; }; 我有一个或多个项目,我需要通过唯一_键(每个项目不同)和属性(更多项目可以具有相同属性)以恒定的O(1)时间访问它们 我在想这样的事情: std::map<int, Item*> my_map1; std::multimap<long, Item*> my_map2; std::map my\u map1; std::multimap

我的
Item
类如下所示:

class Item {
    int unique_key;
    long property;
};
我有一个或多个项目,我需要通过
唯一_键
(每个项目不同)和
属性
(更多项目可以具有相同属性)以恒定的O(1)时间访问它们

我在想这样的事情:

std::map<int, Item*> my_map1;
std::multimap<long, Item*> my_map2;
std::map my\u map1;
std::multimap my_map2;
但我想知道是否还有其他更好的解决方案可以使用更少的内存并避免保持地图同步

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

无论是
std::map
还是
std::multi_map
都不能对元素进行固定时间访问,都是O(lgn)。如果需要持续访问,则必须使用和,这两个容器都是在C++11中引入的

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

但是,如果
unique_键
s的生成方式使其为0…N,并且
属性
s也为0…M,则对于某些N,M,您可以简单地拥有:

std::vector<Item*> my_map1;
std::vector<std::vector<Item*>> my_map2;
std::vector my_map1;
std::vector my_map2;
如果您有一个密集的ID集合,那么它将具有恒定的访问权限,并且是最有效的解决方案。但是如果ID的集合是稀疏的(例如,您可能有0、500和1000万个ID),那么这个解决方案就很糟糕

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

无论是
std::map
还是
std::multi_map
都不能对元素进行固定时间访问,都是O(lgn)。如果需要持续访问,则必须使用和,这两个容器都是在C++11中引入的

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

但是,如果
unique_键
s的生成方式使其为0…N,并且
属性
s也为0…M,则对于某些N,M,您可以简单地拥有:

std::vector<Item*> my_map1;
std::vector<std::vector<Item*>> my_map2;
std::vector my_map1;
std::vector my_map2;
如果您有一个密集的ID集合,那么它将具有恒定的访问权限,并且是最有效的解决方案。但是如果ID的集合是稀疏的(例如,您可能有0、500和1000万个ID),那么这个解决方案就很糟糕

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

无论是
std::map
还是
std::multi_map
都不能对元素进行固定时间访问,都是O(lgn)。如果需要持续访问,则必须使用和,这两个容器都是在C++11中引入的

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

但是,如果
unique_键
s的生成方式使其为0…N,并且
属性
s也为0…M,则对于某些N,M,您可以简单地拥有:

std::vector<Item*> my_map1;
std::vector<std::vector<Item*>> my_map2;
std::vector my_map1;
std::vector my_map2;
如果您有一个密集的ID集合,那么它将具有恒定的访问权限,并且是最有效的解决方案。但是如果ID的集合是稀疏的(例如,您可能有0、500和1000万个ID),那么这个解决方案就很糟糕

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

无论是
std::map
还是
std::multi_map
都不能对元素进行固定时间访问,都是O(lgn)。如果需要持续访问,则必须使用和,这两个容器都是在C++11中引入的

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

但是,如果
unique_键
s的生成方式使其为0…N,并且
属性
s也为0…M,则对于某些N,M,您可以简单地拥有:

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

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

您指出的解决方案有什么问题?@HenriqueBarcelos我想知道是否有其他内置结构/模式来处理此类问题取决于您的
unique_键
值,您可能需要使用
std::vector
std::array
或array。数组具有O(1)访问权。@HenriqueBarcelos嗯,一个问题似乎是它不能满足contant访问时间要求
unordered_map
unordered_multimap
可以解决这个问题。您指出的解决方案有什么问题?@HenriqueBarcelos我会知道是否有其他内置结构/模式可以处理这类问题,具体取决于您的
unique_key
值,您可能需要使用
std::vector
std::array
或array。数组具有O(1)访问权。@HenriqueBarcelos嗯,一个问题似乎是它不能满足contant访问时间要求
unordered_map
unordered_multimap
可以解决这个问题。您指出的解决方案有什么问题?@HenriqueBarcelos我会知道是否有其他内置结构/模式可以处理这类问题,具体取决于您的
unique_key
值,您可能需要使用
std::vector
std::array
或array。数组具有O(1)访问权。@HenriqueBarcelos嗯,一个问题似乎是它不能满足contant访问时间要求
unordered_map
unordered_multimap
可以解决这个问题。您指出的解决方案有什么问题?@HenriqueBarcelos我会知道是否有其他内置结构/模式可以处理这类问题,具体取决于您的
unique_key
值,您可能需要使用
std::vector
std::array
或array。数组具有O(1)访问权限。@HenriqueBarcelos嗯,似乎有一个问题