C++ 具有泛型索引类型的数组

C++ 具有泛型索引类型的数组,c++,c++11,boost,stl,C++,C++11,Boost,Stl,C++11/STL/Boost中是否有表示具有通用索引类型的数组的数据结构,还是必须自己实现这种类型 也就是说,我想这样做: std::set<std::string>> to_lookup, to_lookup2; int i = 10, j = 13; // initialization of to_lookup // count is of the container type/data structure I am looking for count[to_look

C++11/STL/Boost中是否有表示具有通用索引类型的数组的数据结构,还是必须自己实现这种类型

也就是说,我想这样做:

std::set<std::string>> to_lookup, to_lookup2;
int i = 10, j = 13;

// initialization of to_lookup

// count is of the container type/data structure I am looking for
count[to_lookup] = i;
count[to_lookup2] = j;
std::set>to_lookup,to_lookup 2;
int i=10,j=13;
//to_查找的初始化
//count是我正在寻找的容器类型/数据结构
计数[to_lookup]=i;
计数[to_lookup2]=j;

我知道STL中的
std::map
std::unordered_map
容器,但它们不符合我的要求。插入和查找可以在O(1)中完成,这对我来说是至关重要的。

如果您使用的是
std::unordered_map
,这基本上是不可能显著加快的,这仅仅是因为根据元素的数量总会有一些开销(因此您无法得到一个完美的O(1))(除非您能够引用所有可能的键作为数组中的索引)

但是,如果您仍然认为一个
std::unordered_map
由于条目数量过多而太慢,请尝试添加另一层,以减少映射中的元素数量

在您的示例中,使用
std::string
作为键(?),您可以只使用第一个字符(未测试,但应该可以使用):

std::向量容器(256);
//要访问元素,只需再添加一层:
容器[key[0]][key]=值;
不过,迭代所有元素会变得有点复杂。但是,这实际上会将
std::unordered_map
中的元素数量减少到1/255(当然,这取决于键值的实际分布;如果所有键都以
等开头,那么除了少量开销之外,您不会获得任何其他好处)


它会提高性能吗?这实际上取决于条目数和键数。

无序映射有什么问题吗?您到底想实现什么?您是否建议使用
std::set
作为
count
数组中的索引?
count[to\u lookup]的语义是什么=i
be?
unordered\u映射
is O(1)这些操作的平均值。如果这还不够好,那么我敢肯定你是在要求不可能的。如果内射函数
f:I->A
可以解析计算,你可以使用
I
作为索引域,在O(1)中
f
映射到地址域
A
。如果
f
是满射的,则可以使用哈希。如果函数不能通过公式计算,则需要查找表。
std::vector<std::unordered_map<const std::string, myWhateverType> > container(256);

// To access an element, this just adds one more layer:
container[key[0]][key] = value;