如何检查元素是否在 std::set 中?

新手上路,请多包涵

如何检查元素是否在集合中?

是否有以下代码的更简单等价物:

 myset.find(x) != myset.end()

原文由 fulmicoton 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

在许多 STL 容器(例如 std::mapstd::set 、… 中检查是否存在的典型方法是:

 const bool is_in = container.find(element) != container.end();

原文由 unwind 发布,翻译遵循 CC BY-SA 4.0 许可协议

就是这个,一英里。

 bool once(uintptr_t val) {
    return visited.emplace(val).second;
}

不然怎么可能?

https://godbolt.org/z/9zP77jqMc

 func5(unsigned long):
        sub     rsp, 24
        mov     QWORD PTR [rsp+8], rdi
        lea     rsi, [rsp+8]
        mov     edi, OFFSET FLAT:visited2
        call    std::pair<std::_Rb_tree_iterator<unsigned long>, bool> std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>, std::allocator<unsigned long> >::_M_emplace_unique<unsigned long&>(unsigned long&)
        add     rsp, 24
        mov     eax, edx
        ret

原文由 Orwellophile 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题