Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
qwe123qwea
35 / 33 / 17
Регистрация: 20.03.2017
Сообщений: 209
Завершенные тесты: 1
1

Как получить уникальный ID

16.07.2018, 10:55. Просмотров 744. Ответов 7
Метки нет (Все метки)

Здравствуйте, нужно получать подряд ID(0, ... n, n+1) для объектов, если объект был удалён, то ID освобождается и при создании нового объекта, от присваивался бы ему, есть какая-то стандартная реализация такого алгоритма, или это только самому что-то делать?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2018, 10:55
Ответы с готовыми решениями:

Как получить уникальный идентификатор (Hardware ID) HWID?
Всем привет :) Ранее все писал на C#, сейчас потихоньку учу C++ и хотел бы...

Как создать уникальный идентификатор?
Нужно написать класс, который содержит имя служащего и его уникальный...

Массив, индекс как уникальный ID
Добрый день. Пытаюсь сделать список, который хранит в себе список всех...

Как правильно передать уникальный аргумент в функцию
Здравствуйте! Помогите пожалуйста в решении такой проблемы: Есть структура,...

Уникальный ID enum
Нужно создать класс "Игрок" в котором есть поле ID, где задется уникальный...

7
_stanislav
Рука
388 / 359 / 197
Регистрация: 16.08.2014
Сообщений: 1,624
Завершенные тесты: 2
16.07.2018, 11:12 2
qwe123qwea, гобальный стек-синглтон покатит?

Добавлено через 1 минуту
в конструкторе объекта пуш айди, в деструкторе деструкторе поп
0
qwe123qwea
35 / 33 / 17
Регистрация: 20.03.2017
Сообщений: 209
Завершенные тесты: 1
16.07.2018, 11:17  [ТС] 3
_stanislav, не особо хотелось бы что-то глобальное юзать.

Добавлено через 1 минуту
_stanislav, там будет-то элементов <1000, думал, может стандартное что-то есть в либах.
0
lArtl
220 / 100 / 45
Регистрация: 09.10.2014
Сообщений: 571
Завершенные тесты: 3
16.07.2018, 12:02 4
Цитата Сообщение от qwe123qwea Посмотреть сообщение
_stanislav, там будет-то элементов <1000, думал, может стандартное что-то есть в либах.
Чет мне кажется, освобождение айди с возможностью повторного использования очень надуманная
0
qwe123qwea
35 / 33 / 17
Регистрация: 20.03.2017
Сообщений: 209
Завершенные тесты: 1
16.07.2018, 12:31  [ТС] 5
lArtl, по теме если есть что сказать говори, а нет и нефиг демогогию разводить.
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
16.07.2018, 12:52 6
Лучший ответ Сообщение было отмечено qwe123qwea как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
set<int> ID; // храним в файле и читаем в память при запуске программы
 
int GetFreeID() // получить свободный ID
{
    int k = 0;
    for (auto p = ID.begin(); p != ID.end(); ++p)
    {
        k++;
        if (*p != k)
            break;
    }
    ID.insert(k);
    return k;
}
void RemoveID(int k) // удалить ID из базы
{
    ID.erase(k);
}
int main()
{
        Read(); // читаем с диска все ID
...
    int Num = GetFreeID();// получаем свободный ID
    RemoveID(100500); // Освобождаем ID
....
    Write();// записываем на диск все ID
    return 0;
}
1
lArtl
220 / 100 / 45
Регистрация: 09.10.2014
Сообщений: 571
Завершенные тесты: 3
16.07.2018, 14:01 7
Цитата Сообщение от qwe123qwea Посмотреть сообщение
lArtl, по теме если есть что сказать говори, а нет и нефиг демогогию разводить.
Да хоспади, создаешь std::stack, при необходимости нового id проверяешь его, если пустой, то инкримент от самого большого, иначе берем из стека. При освобождении id, кладем его в стек. Все.
0
qwe123qwea
35 / 33 / 17
Регистрация: 20.03.2017
Сообщений: 209
Завершенные тесты: 1
16.07.2018, 14:07  [ТС] 8
zss, мне кажется или тут больше 2х элементов в set не добавится?

Добавлено через 3 минуты
zss, инкремент к нужно после проверки условия перенести.
1
16.07.2018, 14:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2018, 14:07

Уникальный лабиринт
Существует ли алгоритм который бы позволял создать уникальный лабиринт каждый...

Уникальный номер компа
Здраствуйте. Каким образом лучше получить уникальный идентификатор компа...

Создать уникальный двумерный массив
Пишу программку,которая находит в двумерном массиве(8*8) макс и мин...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru