Как хранить информацию о событии, где участвуют два объекта?

У меня есть большое количество объектов, хранятся они все в связном списке. Периодически между двумя объектами происходит некоторое событие. Объекты могут внезапно добавляться в конец списка и удаляться откуда угодно.
Как хранить информацию о произошедшем событии между двумя объектами? Мне нужно знать происходило ли уже это событие.
Сначала думал использовать словарь, словарей, где ключем будет являться объект. Но тут будет либо дублирование информации либо не получение её, т.к. dict[obj1][obj2] != dict[obj2][obj1]. Думал в сторону битовых масок, но типа int не хватит для хранения.
Я думаю, что нужно раздать объектам id и сделать какую-нибудь хэш функцию, которая будет одинаково хэшировать как 1 и 2 так 2 и 1, как 1 и 3 так 3 и 1, и т.д. Но такая функция в голову не приходит.
Как лучше решить поставленную задачу?
  • Вопрос задан
  • 319 просмотров
Решения вопроса 2
@Maa-Kut
Первое, что приходит в голову: взять ID обоих объектов, отсортировать и склеить в строку через какой-нибудь разделитель. Такая "функция" будет давать одинаковый результат и для 1-2, и для 2-1 - что-то навроде "1:2".
Ответ написан
Комментировать
zagayevskiy
@zagayevskiy
Android developer at Yandex
Если id - целое число, то проще всего для такого "хеша" использовать xor(побитовое исключающее или) т.е. hash(1 xor 2) == hash(2 xor 1).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AlexSku
не буду отвечать из-за модератора
Если обратиться к терминологии баз данных, то заведите новую таблицу "События" (для вас это список), а объекты будут ссылаться на элементы этого списка. Если и событие должно ссылаться на объекты, то можно это тоже добавить в таблицу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы