C++ 如何使用c++;无STL

C++ 如何使用c++;无STL,c++,memory,heap-memory,C++,Memory,Heap Memory,我创建了一个内存块,如下所示 typedef struct tPersistNav{ UInt8 DriverID; const char *Start[NUM_START_LOC][STRING_SIZE]; const char *End[NUM_START_LOC][STRING_SIZE]; UInt8 Matrix[NUM_START_LOC][NUM_DEST_LOC][DAYS_OF_WEEK] [HOURS_OF_DAY]; }tpersisnav; tpersisnav

我创建了一个内存块,如下所示

typedef struct tPersistNav{
UInt8 DriverID;
const char  *Start[NUM_START_LOC][STRING_SIZE];
const char  *End[NUM_START_LOC][STRING_SIZE];
UInt8 Matrix[NUM_START_LOC][NUM_DEST_LOC][DAYS_OF_WEEK] [HOURS_OF_DAY];

}tpersisnav;

tpersisnav *memory=new tpersisnav
我的问题是我想基于DriverID创建此内存的多个块,并且只需要使用DriverID密钥访问同一个块。例如,如果驱动程序ID=1,那么它应该访问上面只映射到驱动程序ID=1的内存块


任何指针都是有用的

如果密钥是无符号字节,则哈希表的开销似乎很大。您可以只使用256个指针的数组。这将代码减少到最小,空指针的空间开销可能不是致命的。这是一个恒定的静态空间开销,所以不需要动态分配,如果这是您试图避免的

如果您希望实际的键数远少于256个,那么可以使用双间接方案:使用256字节的向量,将索引包含到块指针的小向量中。这样,两个或多个keyid可以共享一个块;这不太可能有用,除非是在未分配键的情况下,所有这些键在块指针列表中都有空指针的索引。代码仍然不多;空间开销可能会增加25%(如果您使用所有256个密钥ID),但可能会减少一半(如果您使用的密钥ID少于64个)。假设您已经准备好重新分配块指针列表,或者预先知道其最大大小


以上所有假设键在[0255]范围内随机分布。如果从0开始连续分配,问题显然要简单得多。

问题:(i)为什么不使用STL(即标准库提供的容器)?(ii)驱动程序ID是否为连续整数,即1,…,n?我对使用STL有限制,因为对于嵌入式实时应用程序,其速度慢且驱动程序ID可能不是连续整数。我建议您尝试使用STL(如果ID是连续的,则使用
std::vector,如果不是,则使用
std::无序映射),如果速度太慢,就去看看。测试这一点要比编写自己的映射容易得多,特别是如果您希望创建比标准库更快的映射。顺便说一句,
UInt8
似乎只允许256种可能性,因此,排序数组上的
std::map
std::lower_bound
将在不到8个键的比较中完成这项工作。如果不需要,为什么要标记stl?感谢rici的澄清。如果您可以共享一个小的代码片段,它将非常有用