用于确定 unordered_set 是否包含键的 find() 的替代方法

Dan*_*iel 3 c++ stl unordered-set

假设我有一个unordered_set<int> S,我想检查它是否包含某个int x.

有我的方式来写类似if(S.contains(x)){ /* code */ }的作品一样if(S.find(x) != S.end()){ /* code */ }

它可以是一个宏或任何东西,但我发现编写这样一个简单的查找方法很丑陋且不必要地冗长。

眠りネ*_*ネロク 8

而不是使用std::unordered_setfind()成员函数来确定给定的键x是否存在,如下所示:

if (S.find(x) != S.end()) { /* code */ }
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用count()成员函数:

if (S.count(x)) { /* code */ }
Run Code Online (Sandbox Code Playgroud)

Anstd::unordered_set不允许重复,因此count()将返回01


unordered_set::count()成员函数不应该比低效率的unordered_set::find(),因为以找出请求密钥的计数元素的遍历作为一个被发现的,因为不能有重复可以尽快停止。

  • 优化代码意味着 1) 宏与简单函数相比没有优势,请考虑“bool contains(int x) {return S.count(); }.”,以及 B) 函数遵循 C++ 作用域规则,而宏会忽略这些规则。符号“contains”是一个足够常见的函数名称,当它也用作宏时,它会让您感到悲伤。 (2认同)