# 03 Лекция, intrusive контейнеры (10.09.2022) > [TOC] ## Зачем В современном прграммировании доминирующие структуры данных - Вектора и Хеш-таблицы, про двухсвязные списки все забыли, но если мы посмотрим на ядро линукса, например, там доминирующая структура как раз списки, почему? Допустим нам нужно хранить много обьектов в памяти: * Список - без доступа к случайному элементу, разбросан по памяти * Вектор - сложности с удалением, нужно найти сначала * Хэш таблицы - ОК (но дорого) В старкрафте все юниты храняться в двухсвязном списке [Статья](https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbG9MSGl6Tzl0cGktUWJSTTM0dTQ5czAwVGFNd3xBQ3Jtc0ttMzhYZVBRRGVwTFVkT1lQMFkzaWVYMURJTkIzeC1oZzh6WE9mbnM0S0pVcEZWNHlDTG56bnBuZHhNVjdPSTkxTWN1MzNhcExNR1dJX2EwOWVRbVBhcGx0SGozS0E1YzFrQk8zY1lWUzBEZHlDSzg4Yw&q=https%3A%2F%2Fwww.codeofhonor.com%2Fblog%2Ftough-times-on-the-road-to-starcraft&v=arcYfeOe1_0) ```cpp struct Unit { Unit *prev; Unit *next; //... Unit *selected_prev; // для не select не испол Unit *selectrd_next; //... }; ``` ![](https://i.imgur.com/vwgLXUQ.png) Пример узла LRU кэша ```cpp struct Node { Value value; Key key; // ordered by key Node *parent; // Можно как дерево Node *left; Node *right; // oredered by access time Node *next; // Можно как список Node *prev; }; ``` Можно выделить общий код: C-style ```c struct List_element { List_element *prev; List_element *next; }; struct Unit { List_element all_units_node; //... List_element selected_node; //... }; ```