C ++ में बूस्ट का उपयोग करके UUID पीढ़ी का उदाहरण


94

मैं केवल यादृच्छिक यूयूआईडी उत्पन्न करना चाहता हूं, क्योंकि मेरे कार्यक्रम में उदाहरण के लिए अद्वितीय पहचानकर्ता होना जरूरी है। मैंने बूस्ट यूयूआईडी में देखा , लेकिन मैं यूयूआईडी उत्पन्न करने का प्रबंधन नहीं कर सकता क्योंकि मुझे समझ में नहीं आता कि किस वर्ग और विधि का उपयोग करना है।

मैं सराहना करूंगा अगर कोई मुझे इस बात का उदाहरण दे सके कि इसे कैसे हासिल किया जाए।

जवाबों:


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 को आधार के रूप में बदलना होगा। एक बार फिर धन्यवाद!
निकोला

22
@ मिक्की: स्ट्रीमिंग समर्थन का उपयोग करें - एक stringstreamउदाहरण है। या boost::lexical_cast<std::string>(uuid)कि आप के लिए करते हैं।
जॉर्ज फ्रिट्ज़शे

15
डबल परांठे के रूप में: पहला उदाहरण का निर्माण random_generatorकरता है, दूसरा operator()उस उदाहरण पर उपयोग करता है । operator()यदि आप एक से अधिक uuid उत्पन्न करना चाहते हैं, तो आपको जनरेटर को बचाना चाहिए और उस पर कॉल करना चाहिए :random_generator rg; uuid ui = rg();
जॉर्ज फ्रिट्ज़शे जूल

34
@ निकोला: बूस्ट का उपयोग करें :: uuids :: uuids स्ट्रिंग करने के लिए (uuid)
राजा

2
@GeorgFritzsche एक साथ, सटीक समय और मशीन का व्यक्तिगत नेटवर्क पता विशिष्ट है। मैं हालांकि यह हैश समारोह के लिए अच्छी कुंजी हो सकता है। मुझे बाद में स्पष्ट मूल्यों की आवश्यकता नहीं है। लेकिन आपके विचार से मुझे एक विचार आया है। यादृच्छिक संख्या जनरेटर या तो बीज के रूप में समय और नेटवर्क पते का उपयोग करना अच्छा हो सकता है।
डनिजार

34

जॉर्ज फ्रिट्ज़ का जवाब ठीक है लेकिन शायद थोड़ा भ्रामक है। यदि आपको एक से अधिक 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
आपको जनरेटर का पुन: उपयोग क्यों करना चाहिए? क्या यह प्रदर्शन अनुकूलन या सुरक्षा टिप है?
फ्रेड

5
यह एक बहुत अच्छा सार्वभौमिक अद्वितीय आईडी नहीं होगा यदि एक नया जनरेटर का उपयोग करने से विशिष्टता की समस्या उत्पन्न होती है।
xaxxon

@xaxxon क्या आपके पास नया जनरेटर बनाते समय विशिष्टता की समस्या के बारे में कोई दस्तावेज है।
सनेश कुमार

1
@ सनेशकुमार यह एक "सार्वभौमिक रूप से विशिष्ट पहचानकर्ता" है एक कारण के लिए "यह जनरेटर अद्वितीय पहचानकर्ता" नहीं है।
xaxxon

1
मुझसे सीखें और जनरेटर थ्रेड को स्थानीय बनाएं। वे बीज के लिए बहुत महंगे हैं
जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.