LINUX.ORG.RU

[C/C++] выбор элемента списка без поиска по всему списку


0

2

Все добрых суток.

Допустим есть структура:

struct m{
     int id;
     int val;

     struct m *next;   // сразу добавил для работы в списке
};

Можно ли сделать обращение к элементу списка таких структур, таким же быстрым как к элементу массива, если я точно знаю номер элемента массива, id равно n+1'ому элементу массива.

К примеру

struct m arr[10]; // 10ть элементов 
struct m *list;   // указатель на первый элемент списка

Я знаю что мне нужен элемент с id = 5, тогда для массива я просто обращаюсь к элементу arr[4], для списка же мне придётся перебирать все элементы list пока я не найду нужный c id равным 5ти.

Можно ли как сразу обратиться к 5-му элементу?

Заранее спасибо!

★★★★★

Последнее исправление: cyclon (всего исправлений: 1)
Ответ на: комментарий от aho

Да тут уже сказали - хеш-таблица. В расширении stl есть готовая. Если id эти так и остантся численными то хеш значение и будет этот id по маске.

bga_ ★★★★
()
Ответ на: комментарий от bga_

> Да тут уже сказали - хеш-таблица. В расширении stl есть готовая

да - есть, вообще контейнеров разных мастей полно, и все их авторы ссылаются на бенчмарки, что они быстрее всех, но у стандартного map есть один маленький плюс - он стандартный, хотя если конечно задача требует, и это оказывается узким местом - то не вопрос подобрать что-то на замену, но если у человека «10ть элементов» (с), то смысла использовать что-то нестандартное просто нет

aho
()
Ответ на: комментарий от bga_

> Да тут уже сказали - хеш-таблица. В расширении stl есть готовая. Если id эти так и остантся численными то хеш значение и будет этот id по маске.

А если элементов много больше чем число вариантов хэша, или если все id выьраны так что у них одно и то же хэш значение?;-)

ТС так задачу и не уточнил, так что соревнование «кто больше знает контейнеров и чей контейнер круче» толку не имеет - от задачи все зависит...

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.