gpt4 book ai didi

c++ - 在 MyClass 指针的容器中找到一个 void 指针?

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

我有一个指针 void* p指向一个未知类型的变量,以及一个容器std::set<MyClass*> c填充了 MyClass指针。有什么方法可以查明是否 c包含 p (即它是否包含指向与 p 相同的内存地址的指针)而无需手动循环遍历 c 中的元素,这不会导致未定义的行为? (请注意,如果我在 p 中找不到它,我不会取消引用 c。)

此外,我假设转换 pMyClass*如果 p 会导致未定义的行为将指向一个不相关但与 MyClass 相关的数据类型的变量,但也许事实并非如此?

最佳答案

I assume that casting p to MyClass* would cause undefined behavior if [..]

它可能会导致 UB,这在学究气上是正确的。

但应该可以在实践中使用(UB 的乐趣)。

Is there some way to find out whether c contains p [..] without manually looping through the elements in c.

std::find_ifstd::binary_search可以与适当的谓词一起使用以在线性时间内找到它(std::set::iterator 不是随机迭代器,因此“伪造”binary_search 复杂性)。

如果您可以将容器更改为:

  • std::set<MyClass*, std::less<void>> , 那么你可以安全地使用 std::set::find感谢透明比较器。

  • 已排序 std::vector<MyClass*> , 那么你可以使用 std::binary_search具有正确的复杂性。

关于c++ - 在 MyClass 指针的容器中找到一个 void 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54054737/

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