【问题标题】:How to Define Hash Value for Sequence of Functions (C++)如何定义函数序列的哈希值 (C++)
【发布时间】:2013-12-18 00:03:03
【问题描述】:

我有一个软件可以对小图像(位图、精灵、纹理,无论你想怎么称呼它们)进行各种操作。为了防止大量重复工作,我想设置一个缓存,这样一旦特定的源图像经过一系列操作,就可以简单地从缓存中调用它,而不是通过相同的操作序列可能需要数十万次。

我希望缓存成为特定操作序列(带参数)的“哈希值”与实际数据之间的映射。不过,我对如何“散列”函数感到非常困惑。这是在 c++11 中实现的,因此我想到的一些 Pythonic 解决方案不起作用,因为它们依赖于一流的函数和内省。 c++的解决方案是什么?

一个例子:

  1. src1 = load("path/file.png");
  2. convert_space(copy_src1, LABA);
  3. adj_hue(copy_src1, 45.0f);
  4. src2 = load("path/file2.png");
  5. compose_over(copy_src1, src2, dst);
  6. 缓存dst
  7. 利润 :)

【问题讨论】:

    标签: c++ c++11 hash function-pointers


    【解决方案1】:

    这听起来更像是您想要一个应用了给定一系列操作的图像的唯一标识符。

    最直接的方法是只为每个操作赋予它自己的标记,然后将该标记附加到原始图像的标识符中,用于应用到它的每个操作。

    例如,如果您有一个图像test.png,并且应用了操作 A 和 B,则可以使用 test.png_A_B 作为唯一标识符。

    【讨论】:

    • “图像”永远不会写入文件系统,而是保存在缓冲区中(实际上是img 对象包装器)。我可以在包装器中添加一个变量来跟踪它的历史;但如果没有某种哈希,不缓存可能同样有效。
    • 图像来自哪里并不重要,但您可能对每张图像都有某种标识符;这个想法只是附加到该标识符并将其用作您的“哈希”。我只是以文件名为例。
    • 对于图像,您应用一系列函数。每个函数都有特定的参数。我想知道每个转换函数是否可以计算其参数的唯一哈希?然后将该散列与每个函数相关联,并存储它们的列表。有多少种可能的转换函数?
    • @JeffreyDeLeo 可能有大约 15 个基本操作,其中许多有许多琐碎的重载。即 adj_hue(img& src, int degree) 和 adj_hue(img& src, float radians)。
    • @justinzane:使用您的示例代码,dauphic 的方法和类似 RPN 的附加操作顺序给出了类似“path/file.png convert_space(LABA) adj_hue(45) path/file2.png compose_over ”。该字符串本身不是 hash - 它是 key - 您将密钥映射到 unordered_map 中的关联图像,然后让实现散列它想要的密钥.如果某些操作是可交换的,您可能需要标准化顺序或参数,以便键匹配。
    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2021-03-15
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多