Is this an appropriate way to provide unique keys in a map?  In other words, is the key being made from the unique value contained in the uuid, or is it being made from the pointer to the uuid_t struct?  A side question, is there a more efficient container, when I don't care about the ordering by keys inside the container?
#include <uuid/uuid.h>
int main(int argc, char **argv)
{    
   std::map<uuid_t,int> myMap;         
   uuid_t id1;
   uuid_t id2;
   uuid_generate( (unsigned char *)&id1 );  
   uuid_generate( (unsigned char *)&id2 );
   myMap[id1] = 5;
   myMap[id2] = 4;
}
I guess the best way of using third-party C-structures is to use them through their friendly functions. So if you wanna use uuid_t in STL, I'd suggest you to create some kind of C++ interface/wrapper to that structure like
struct Uuid {
  uuid_t uuid;
  Uuid(const Uuid &other) { uuid_copy(uuid, other.uuid); }
  Uuid(const uuid_t other_uuid) { uuid_copy(uuid, other_uuid); }
  void generateInplace() { uuid_generate(uuid); }
  static Uuid generate() { Uuid wrapped; uuid_generate(wrapped.uuid); return wrapped; }
  bool operator<(const Uuid &other) { return uuid_compare(uuid, other.uuid) < 0; }
  bool operator==(const Uuid &other) { return uuid_compare(uuid, other.uuid) == 0; }
  // ...
};
That should hide from you the fact that uuid_t isn't structure but pointer to array (i.e. typedef unsigned char uuid_t[16]).
Note: there is boost version of uuid library
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With