数据结构,可通过多个密钥或密钥和优先级快速访问

时间:2018-03-24 11:07:09

标签: c++ algorithm dictionary priority-queue

由于std::map和类似的数据结构,基于密钥可以轻松快速插入,访问和删除数据元素。

感谢std::make_heap及其收集,可以根据值维护优先级队列。

但很多时候,算法需要两者的结合。例如,一个具有以下结构:

struct entry{
    int id;
    char name[20];
    double value;
}

该算法需要快速查找并删除entry最高的value。这需要具有std's堆函数的优先级队列。它还需要根据name和/或id快速删除一些元素。这需要std::map

当编程这种算法时,我经常最终只使用一个好的数据结构来进行最需要的操作(例如,优先访问),然后使用线性搜索通过该结构进行较少需要的操作,示例删除密钥。

但是有可能实现这种算法,保持对两个密钥的优先级和访问权限的快速访问吗?

1 个答案:

答案 0 :(得分:1)

一种方法是提升多指数。

另一种方法是创建两个数据结构,其值为shared_ptr<const entry>并使用不同的排序,然后是一个包装类,确保在两者中都进行添加/删除。当你想要编辑时,你自然要删除然后重新插入。

Boost的多索引设置起来比较复杂,但由于两个数据结构交织在一起,声称性能更快,从而带来更好的缓存性能和更少的内存使用。