Генерация уникального идентификатора в С++

Простое решение — использовать hash 64-битное целое число, где hashes младшие 16 бит — первая координата hashalgorithm вершины, следующие 16 бит hashing — вторая и так далее. Это string-hashing будет уникальным для всех digest ваших вершин, хотя и не очень hashing компактным.

Итак, вот какой-то hashalgorithm половинчатый код для этого. Надеюсь, я cxx правильно понял броски.

uint64_t generateId( uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4)
{ 
   uint64_t id;
   id = v1 | (((uint64_t)v2) << 16) | (((uint64_t)v3) << 32) | (((uint64_t)v4) << 48);
   return id;
}

При cpp желании это можно сделать digest с помощью объединения (отличная digest идея от Леона Тиммерманса, см. комментарий). Очень cpp чисто таким образом:

struct vertex
{
    uint16_t v1;
    uint16_t v2;
    uint16_t v3;
    uint16_t v4;
};

union vertexWithId
{
    vertex v;
    uint64_t id;
};

int main()
{
    vertexWithId vWithId;
    // Setup your vertices
    vWithId.v.v1 = 2;
    vWithId.v.v2 = 5;

    // Your id is automatically setup for you!
    std::cout << "Id is " << vWithId.id << std::endl;
    return 0;
}

c++

hash

2022-10-22T22:30:12+00:00