我有一些不透明的字节,我想在std::map
中使用,作为键和值。我创建了一个类OpaqueBytes
,它有两个(私有)成员:_data
和_size
来存储字节。我的Cocoa背景告诉我,我需要在类上实现散列函数和相等函数,以便在std::map
中使用它。问题是,基于Can a STL map be used with keys of varying sizes,似乎STL需要严格的弱排序。
我有几个问题:
我的直觉是创建一个表示不透明字节的类吗? STL中是否存在一个用于保存不透明字节的类?用Cocoa的说法,是否存在与NSData
我应该如何实现OpaqueBytes
的排序?我不能只使用memcmp
比较字节,因为两个字节的字符串可能有不同的长度 - 我不希望FF EE被认为等于FF。
答案 0 :(得分:3)
如果您需要使用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 );
}
当然,您可以先比较尺码。你会得到一个不同的订单,但它仍然是严格的。
(我仍然认为,除此之外,使用比较功能可以更好地实现该地图而不是更少)。