为什么 std::set 没有“包含”成员函数?

新手上路,请多包涵

我大量使用 std::set<int> 而且我通常只需要检查这样的集合是否包含数字。

我会觉得很自然地写:

 if (myset.contains(number))
   ...

但是因为缺少一个 contains 成员,所以需要编写繁琐的:

 if (myset.find(number) != myset.end())
  ..

或不那么明显:

 if (myset.count(element) > 0)
  ..

这个设计决定有理由吗?

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

阅读 885
1 个回答

我认为这可能是因为他们试图使 std::setstd::multiset 尽可能相似。 (显然 count std::multiset 完全合理的含义。)

我个人认为这是一个错误。

如果您假装 count 只是 contains 的拼写错误,并且将测试写为:

 if (myset.count(element))
   ...

尽管如此,这仍然是一种耻辱。

原文由 Martin Bonner supports Monica 发布,翻译遵循 CC BY-SA 3.0 许可协议

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