在c++中生成唯一标识符

9
什么是在C++中从两个(或更多)short int生成唯一ID的最佳方法?我试图唯一地标识图中的顶点。顶点包含两到四个short int作为数据,理想情况下,ID将是它们的某种哈希值。优先考虑可移植性和唯一性,而不是速度或易用性。
这里有很多好的答案,我今晚会尝试它们并看看哪个最适合我的问题。我再多说几句我正在做什么。
该图是来自音频文件的样本集合。我使用图作为马尔科夫链,从旧文件生成新的音频文件。由于每个顶点存储几个样本并指向另一个样本,并且所有样本都是short int,因此从数据生成ID似乎很自然。将它们组合成一个long long听起来不错,但也许只需要一个0 1 2 3 generateID就足够了。如果每个顶点存储2个16位样本,则需要多少空间才能保证唯一性?有2^32种可能的组合,对吗?因此,如果每个顶点存储4个样本,则有2^64种可能的组合?
与库和平台特定的解决方案无关。我不希望其他人编译我的程序需要下载其他库或更改代码以适应其操作系统。
11个回答

-1

随口一说,我会建议使用质数。

id = 3 * value1 + 5 * value2 + .... + somePrime * valueN

确保不要溢出您的id空间(long?long long?)。由于您拥有固定数量的值,只需使用一些随机素数即可。不必费心生成它们,在列表中有足够的素数可供使用一段时间。

我对证明有点模糊,也许更数学化的人可以帮我解决。可能与数字的唯一质因数分解有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接