C++ 如何有效地存储和排序生日攻击的哈希值

C++ 如何有效地存储和排序生日攻击的哈希值,c++,arrays,sorting,C++,Arrays,Sorting,我有许多(2^30乘以50位)散列函数的输出。我需要以某种方式存储它,并将每个新元素与所有以前的元素进行比较,然后插入它是否唯一。如果在插入新元素时我的散列值数组没有弄乱,那么我不需要存储散列值,它们是连续的 我如何存储它,然后搜索口是心非 作为散列的值,我只使用“1”、“2”、“3”、“4” 编辑: 输出空间为50位的哈希函数上的BA几乎需要1.25*sqrt(2^50)次尝试。每个输出50位。因此,它的空间接近250 MB。不确定您想要实现什么,但可能需要使用一个元素作为初步检查,以加快进程

我有许多(2^30乘以50位)散列函数的输出。我需要以某种方式存储它,并将每个新元素与所有以前的元素进行比较,然后插入它是否唯一。如果在插入新元素时我的散列值数组没有弄乱,那么我不需要存储散列值,它们是连续的

我如何存储它,然后搜索口是心非

作为散列的值,我只使用“1”、“2”、“3”、“4”

编辑:
输出空间为50位的哈希函数上的BA几乎需要1.25*sqrt(2^50)次尝试。每个输出50位。因此,它的空间接近250 MB。

不确定您想要实现什么,但可能需要使用一个元素作为初步检查,以加快进程

请注意,当文章提到“m个不同的散列函数”时,它真正的意思是,m个不同的函数可以是相同的算法,具有不同的参数,产生不相关的结果。例如,您可以简单地在要散列的数据前面加上一个值为0到
m-1的字节。或者,您可以将SHA256散列的256位切碎为24位的组,或者根据您的过滤器的大小来决定大小。

a:

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
字符串到字符串(长值)
{
ostringstream oss;

oss
std::set
std::map
是否适合这里?@BoBTFish,它如何处理250MB的数据量。
#include <string>
#include <map>
#include <sstream>
#include <algorithm>
#include <iterator>

using namespace std;

string toString(long value)
{
    ostringstream oss;
    oss << value;
    return oss.str();
}

long hash(const string& key)
{
    return 0;
}

string generateKey()
{
    static long value = 0;
    ++value;
    return toString(value);
}

pair<string, long> generateKeyValuePair()
{
    string key = generateKey();
    return make_pair(key, hash(key));
}
int main()
{
    map<string, long> hashes;

    generate_n(inserter(hashes, hashes.begin()), 5, generateKeyValuePair);

    return 0;
}