如何在std :: map中使用表示不透明字节的类?

时间:2011-03-04 12:17:07

标签: c++ stl

我有一些不透明的字节,我想在std::map中使用,作为键和值。我创建了一个类OpaqueBytes,它有两个(私有)成员:_data_size来存储字节。我的Cocoa背景告诉我,我需要在类上实现散列函数和相等函数,以便在std::map中使用它。问题是,基于Can a STL map be used with keys of varying sizes,似乎STL需要严格的弱排序。

我有几个问题:

  1. 我的直觉是创建一个表示不透明字节的类吗? STL中是否存在一个用于保存不透明字节的类?用Cocoa的说法,是否存在与NSData

  2. 的对应关系
  3. 我应该如何实现OpaqueBytes的排序?我不能只使用memcmp比较字节,因为两个字节的字符串可能有不同的长度 - 我不希望FF EE被认为等于FF。

1 个答案:

答案 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 );
}

当然,您可以先比较尺码。你会得到一个不同的订单,但它仍然是严格的。

(我仍然认为,除此之外,使用比较功能可以更好地实现该地图而不是更少)。