Эффективно ли читать содержимое файла в unordered_map, если в нем более 1000 записей - PullRequest
0 голосов
/ 14 июля 2020

Я делаю таблицу ha sh, которая должна давать довольно быстрое время поиска для некоторых значений, которые я ввожу заранее. Я не знал, как go об этом, но мой друг сказал, что я должен создать текстовый файл и просто иметь неупорядоченную карту, которая читает из текстового файла и помещает значения в код, прежде чем я его запустил. Это эффективно? Есть ли лучший способ сделать это?

Также примечание, значения должны быть структурами. Можно ли будет прочитать их в коде с неупорядоченной картой?

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Используйте std :: map, когда

  1. Вам нужны упорядоченные данные.
  2. Вам нужно будет распечатать / получить доступ к данным (в
  3. отсортированном порядке). Вам нужен предшественник / преемник элементов.

Используйте std :: unordered_map, когда

  1. Вам нужно вести подсчет некоторых данных (пример - строки) и упорядочивание не требуется .
  2. Вам нужен доступ к одному элементу, т.е. без обхода.

Также примечание стороны, значения должны быть структурами. Будет ли возможно прочитать их в коде с помощью неупорядоченной карты?

Конечно, вы можете, но я надеюсь, вы знали, что вы не можете прочитать файл с картой fstream, предназначенный для этой цели.

0 голосов
/ 14 июля 2020

Как сказано в комментариях, ваша идея достаточно хороша, если только эти структуры не действительно большие, мегабайты.

Если у вас есть причины беспокоиться о производительности, например, если вы хотите поддерживать миллионы записей или очень большие значения, более сложные подходы могут быть более эффективными.

Когда мне нужна только 64-битная поддержка, я иногда делаю единственный двоичный файл, оптимизированный для отображения памяти целиком. В частности, заголовок фиксированного размера, а затем отсортированные массивы (ключ, смещение) кортежей, служащих первичным индексом (можно использовать двоичный поиск там, ОС только извлекает необходимые страницы из сопоставленных файлов и довольно агрессивно кэширует их в ОЗУ) , затем значения со смещениями, указанными в индексе.

...