какой тип структуры данных будет эффективен для поиска в таблице процессов - PullRequest
4 голосов
/ 07 февраля 2010

Я должен искать таблицу процессов, которая заполнена именами процессов, работающих на данном наборе IP-адресов. В настоящее время я использую мультикарты в C ++ с именем процесса в качестве ключа и IP-адресом в качестве значения. есть ли другая эффективная структура данных, которая может выполнить ту же задачу. также я могу получить какой-либо параллелизм с помощью pthreads? если это так, может кто-нибудь направить меня в правильном направлении

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

Какой типичный запрос к вашей таблице?

Попробуйте использовать hashmap, это может быть быстрее для больших таблиц.

Как вы храните имена и IP? UTF, строка, символ *? IP как uint32 или строка?

Для структуры только для чтения с большим количеством запросов на чтение вы можете использовать несколько потоков.

обн: используйте std::unordered_multimap из #include <tr1/unordered_map>

1 голос
/ 07 февраля 2010

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

0 голосов
/ 07 февраля 2010

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

hash_multimap структура данных реализует контейнер хеш-таблицы STL и может быть вам полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...