我正在执行锁定Mecahnism,为此我需要快速查找是否给定的Id已被锁定。现在我正在考虑使用地图,我想知道是否有一些更好的结构。基本上我不需要地图,因为没有完成映射。但是,如果我使用矢量,则必须进行线性搜索,这对于许多条目来说会变得很昂贵。使用地图来检查ID是否存在
现在我想知道是否有某种结构允许我进行类似的快速查找,而不需要额外的存储etra数据开销。
i.E.
std::map<IdType, bool> locked;
// Prevent deadlock by checking if this thread already locked. Otherwise
// it can pass through.
if(locked.find(Id) != locked.end())
lock();
正如你所看到的,我并不真的需要映射值。我知道对于std::vector
,使用bool
,它被压缩成比特。现在我想知道我是否浪费了大量的内存来维护这些布尔,而我甚至不需要它们。 char
会更好吗?还是其他一些结构只是让我在没有额外数据的情况下进行密钥查找?
如果不需要相关性,那么使用'set'怎么样?在之间,你也应该用'vector'来描述它。不要惊讶,如果你的线性搜索执行得更好,'set :: find' – Arunmu
是否应该在一些内存受限的硬件上运行?如果要在个人电脑上运行,不要打扰优化几个字节,还有一个竞争条件在您的支票 – slawekwin
@slawekwin https://www.safaribooksonline.com/library/view/c-coding-standards /0321113586/ch10.html在这里适用:写入std :: set代替std :: map更好地以零代价向程序员捕获代码的意图,而不会让未来的程序员怀疑未使用的值可能用于。 –