我正在寻找一种替代std::map<long, int>的极简方案,它将用于Windows内核驱动程序,因此应该非常快速。它预计将保存相对较小(工作集中的约200个)的键和大量插入操作。
我正在寻找可以减少键搜索成本的解决方案。
我正在寻找可以减少键搜索成本的解决方案。
这些已经为您准备好了。
请查看RtlXxxGenericTable和RtlXxxGenericTableAvl调用。
RtlNumberGenericTableElements
Windows内核驱动程序
的可移植性。 - Mooing Duckstruct KeyValuePair
{
KeyType key;
ValueType value;
};
struct Map
{
KeyValuePair *list; //it can be linkedlist as well
};
//these are the interfaces which operate on map
void Insert(Map * map, KeyType key, ValueType value);
void Update(Map * map, KeyType key, ValueType value);
int Find(Map * map, KeyType key, ValueType *outValue);
//Implement Get in terms of Find
ValueType Get(Map * map, KeyType key)
{
ValueType value;
Find(map, key, &value);
return value;
}
如果键的数量非常少,例如只有10个或更少,也许您可以仅使用线性搜索来查找。如果您注意保持键空间在内存中压缩以最大化缓存命中率,则速度可能会很快,并且在内存分配方面具有非常低的开销。
过去,对于少于几千个对象的地图,我发现创建一个按键值排序后使用二分查找进行搜索的std::vector比使用std::map要快得多。
std::map
太慢了吗? - AJG85