【发布时间】:2014-04-02 22:07:03
【问题描述】:
我必须实现一个支持以下三个功能的数据结构。数据是一对(a,b)的两个双精度值,数据集中在特定区域。假设“a”的值在 500-600 范围内。
Insert(double a, double b) - 在数据结构中插入数据,一对(double,double)。如果该对的第一个元素已经存在,则将其第二个元素更新为新值。
Delete(double a) - 删除包含第一个元素 = a 的数据。
PrintData(int count) - 打印具有第 count 个最大值的数据的值。根据data.first比较值。
输入文件包含一系列插入、删除和打印数据操作。目前,我已经使用 STL-Map 将数据结构实现为高度平衡的二叉搜索树,但速度还不够快。
还有其他比 Map 更快的实现吗? 我们可以使用缓存来存储最常见的 PrintData 查询。
【问题讨论】:
-
@Inertiatic 根据 #3,优先级队列不会(有效地)支持“count-th maximum value”查询。
-
@Dukeling 我一定误解了这个问题。编辑:你是对的,我知道我在哪里迷路了。 Delete 必须搜索并删除该元素,该元素可以位于数据结构中的任何位置。
-
数据结构中有哪些元素?除非有成千上万个,否则使用键的有序向量和具有值的并行向量并在其中插入/删除可能要快得多!如果您可以合理地存储元素,例如,使用转换为
int然后在向量中搜索,您可以有效地将数据结构扩展到更多元素。更新值时,如果计数大于当前值,您还将立即存储当前最大值/计数(无需搜索)。 -
参数“a”用于排序(比较两个数据值)。但是,我们需要打印第 th 个最大值,而不是最大值。
-
@DietmarKühl 最终数据结构中大约有 6,00,000 个元素。
标签: c++ algorithm data-structures stl