1

Тема: Порядок розташування елементів у контейнерах HashMap і BTreeMap

Контейнер BTreeMap впорядковує елементи згідно значень ключів.
HashMap — випадковим чином.
Чи можна змусити якийсь із цих контейнерів упорядковувати елементи згідно їхньої послідовності потрапляння до контейнера?
Тобто якщо вставляю елементи в такій послідовності: 3, 7, 6 — я хочу отримати 3, 7, 6 всередині контейнера, а не 3, 6, 7 чи якось інакше.

2

Re: Порядок розташування елементів у контейнерах HashMap і BTreeMap

Teg Miles написав:

Контейнер BTreeMap впорядковує елементи згідно значень ключів.
HashMap — випадковим чином.
Чи можна змусити якийсь із цих контейнерів упорядковувати елементи згідно їхньої послідовності потрапляння до контейнера?
Тобто якщо вставляю елементи в такій послідовності: 3, 7, 6 — я хочу отримати 3, 7, 6 всередині контейнера, а не 3, 6, 7 чи якось інакше.

Нащо ламати роботу цих колекцій, якщо можна взяти вектор ..

let mut v = vec![3];
v.push(7);
v.push(6);
assert_eq!(v, [3, 7, 6]);
Подякували: koala1

3

Re: Порядок розташування елементів у контейнерах HashMap і BTreeMap

Ні, бо BTreeMap - це дерево, впорядковане за певним співвідношенням (зазвичай - просто за операцією <), а HashMap - геш-таблиця, місця в якій визначаються геш-функцією з додатковими правилами.
Якщо вам треба, щоб елементи швидко знаходилися за значенням - це HashMap. Якщо треба, щоб знаходилися за співвідношенням ("більше" чи "менше") - це BTreeMap.

Якщо вам лише додавати елементи в кінець і вилучати лише з кінця - то вектор ідеально підходить для цього.
Якщо треба і додавати, і вилучати - то вам потрібен LinkedList.
Якщо треба додавати чи вилучати то в кінець, то в початок - це VecDeque.
Якщо треба одразу кілька різних операцій - то можна застосовувати індекси (додаткові структури для пошуку елементів за певними критеріями).

Коротше - припиняйте вже економити час на постановці задачі і повністю пишіть, що вам треба, з усіма вимогами, а не лише одну поточну вимогу.

Подякували: leofun011

4

Re: Порядок розташування елементів у контейнерах HashMap і BTreeMap

У мене там пошук слова-ключа до якого прив'язані його початок і кінець,
тому вектор і схожі контейнери не підійдуть.
Я знайшов крейт indexmap — там усе, що мені потрібно.
Це як HashMap тільки з розширеними можливостями, схожий на Dict з Python.