C ++ unordered_map / hash_map / Google's density_hash - как вводить двоичные данные (buf + len) и вставлять операцию - PullRequest
2 голосов
/ 07 июня 2010

У меня есть два вопроса о Карты Google_plus_hash , которые можно использовать вместо более стандартных unordered_map или hash_map:

  1. Как использовать произвольный сегмент памяти двоичных данных в качестве ключа: я хочу пару буфер + длина, которая все еще может содержать несколько символов NUL (\ 0). Я могу видеть, как я использую NUL-концевую строку char *, но это не то, что я хочу.

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

Буду признателен, если кто-нибудь сможет пролить свет на эту тему.

С уважением,

- Рыба Шломи

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Я бы не согласился с Нилом.

Я бы использовал insert для числа 2. Использование find затем insert вызывает 2 просмотра, в то время как использование insert вызывает один поиск без переопределения, если элемент уже присутствует. Обычно insert возвращает итератор для соответствующей пары ключ / значение (даже если она не обновлена) + логическое значение, которое указывает, была ли вставка выполнена.

std::pair<iterator, bool> result = map.insert(std::make_pair(key(), value());

result.first->second; // accesses the value at key: `key()`
2 голосов
/ 07 июня 2010

Для # 1 используйте std::string в качестве ключа - std :: strings может содержать встроенные NUL-символы без проблем. Для № 2 см. Ответ Матье.

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