作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些不透明的字节,我想在 std::map
中用作键和值。我创建了一个类 OpaqueBytes
,它有两个(私有(private))成员:_data
和 _size
,用于存储字节。我的 Cocoa 背景告诉我,我需要在类上实现散列函数和相等函数才能在 std::map
中使用它。问题是,STL 似乎需要严格的弱排序,基于 Can a STL map be used with keys of varying sizes .
我有几个问题:
我创建一个类来表示不透明字节的直觉是否正确? STL 中是否已经存在一个类来保存不透明字节?用 Cocoa 的说法,是否有一个等同于 NSData
的东西?
我应该如何实现 OpaqueBytes
的排序?我不能只使用 memcmp
比较字节,因为两个字节字符串的长度可能不同 - 我不希望 FF EE 被视为等于 FF。
最佳答案
如果您需要使用 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 );
}
当然,您可以先比较尺寸。您会得到不同的顺序,但仍然很严格。
(我仍然认为,顺便说一下,使用比较函数比使用较少函数更好地实现 map )。
关于c++ - 如何在 std::map 中使用表示不透明字节的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5193575/
我是一名优秀的程序员,十分优秀!