在C ++中使用Boost生成UUID的示例


94

我只想生成随机的UUID,因为对于程序中的实例来说,拥有唯一的标识符非常重要。我研究了Boost UUID,但是由于无法理解要使用哪个类和方法,因此无法生成UUID。

如果有人可以给我任何实现此目标的示例,我将不胜感激。

Answers:


164

一个基本的例子:

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.

int main() {
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    std::cout << uuid << std::endl;
}

输出示例:

7feb24af-fc38-44de-bc38-04defc3804de


4
以及如何将其分配给字符串?因为我对每个实例都有一个共同的基础,所以我需要将UUID连接到一个基础。再次感谢!
Nikola

22
@nik:使用流媒体支持 -有一个stringstream例子。还是boost::lexical_cast<std::string>(uuid)为您做到这一点。
Georg Fritzsche 2010年

15
至于双重括号:第一个构造的实例random_generator,第二个operator()在该实例上使用。operator()如果要生成多个uuid,则应保存并调用生成器:random_generator rg; uuid ui = rg();
Georg Fritzsche 2010年

34
@Nikola:使用boost :: uuids :: to_string(uuid)对uuid进行字符串化
国王

2
@GeorgFritzsche在一起,确切的时间和机器的单独网络地址是唯一的。我虽然因此可能是哈希函数的好键。以后我不需要明确的值。但是你的想法给我带来了一个想法。使用时间和网络地址作为随机数生成器的种子可能是一个好方法。
danijar

34

格奥尔格·弗里茨切(Georg Fritzsche)的回答是可以的,但可能会引起误解。如果需要多个uuid,则应重新使用生成器。也许这样更清楚:

#include <iostream>

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.


int main()
{
    boost::uuids::random_generator generator;

    boost::uuids::uuid uuid1 = generator();
    std::cout << uuid1 << std::endl;

    boost::uuids::uuid uuid2 = generator();
    std::cout << uuid2 << std::endl;

    return 0;
}

1
为什么要重新使用发电机?这是性能优化还是安全提示?
2015年

5
如果使用新的生成器引起唯一性问题,那么它将不是一个很好的通用唯一性ID。
xaxxon

@xaxxon创建新的生成器时,您是否有关于唯一性问题的任何文档。
Saneesh kumar

1
@Saneeshkumar出于某种原因,它是“通用唯一标识符”,而不是“此生成器唯一标识符”。
xaxxon

1
向我学习,并使生成器线程局部化。它们的播种成本非常高
詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.