Как я могу использовать класс, представляющий непрозрачные байты в std :: map? - PullRequest
1 голос
/ 04 марта 2011

У меня есть несколько непрозрачных байтов, которые я хочу использовать в std::map, как в качестве ключей, так и значений.Я создал класс OpaqueBytes, который имеет два (приватных) члена: _data и _size для хранения байтов.Мой опыт работы в Какао говорит мне, что мне нужно реализовать хеширующую функцию и функцию равенства в классе, чтобы использовать ее в std::map.Проблема в том, что кажется, что STL требует строгого слабого упорядочения, основанного на Можно ли использовать карту STL с ключами разных размеров .

У меня есть несколько вопросов:

  1. Правильна ли моя интуиция для создания класса для представления непрозрачных байтов?Есть ли класс в STL, который уже существует для хранения непрозрачных байтов?На языке какао, есть ли эквивалент NSData?

  2. Как мне реализовать порядок OpaqueBytes?Я не могу просто сравнить байты, используя memcmp, потому что две строки байтов могут иметь различную длину - я бы не хотел, чтобы FF EE считался равным FF.

1 Ответ

3 голосов
/ 04 марта 2011

Если вам нужно использовать OpaqueBytes в качестве ключа, вам нужно строгое сравнение. Это может быть функция-член или функция, не являющаяся членом.

Можно использовать что-то вроде этого:

// assumed a friend
bool operator<( OpaqueBytes const& lhs, OpaqueBytes const& rhs )
{
   int res = memcmp( lhs._data, rhs._data, std::min(lhs_._size, rhs_._size)  );
   return ( res < 0 ) || ( res == 0 && lhs._size < rhs._size );
}

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

(Я все же думаю, что карта лучше будет реализована с помощью функции сравнения, чем менее).

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