gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:08:16 25 4
gpt4 key购买 nike

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

我有几个问题:

  1. 我创建一个类来表示不透明字节的直觉是否正确? STL 中是否已经存在一个类来保存不透明字节?用 Cocoa 的说法,是否有一个等同于 NSData 的东西?

  2. 我应该如何实现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com