c++ - 检查变量是否等于这些值中的任何一个
问题描述
在 c++ 中,有没有办法查看变量是否等于其中一个值?现在我必须做
if (fExt == "zip" | fExt == "7z" | fExt == "gz" | fExt == "tar")
{
//do something
}
但是,有没有更有效的方法?
解决方案
带有集合的示例:
if (std::set<std::string>{"zip", "7z", "gz", "tar"}.count(fExt)) {
std::cerr << "yes" << std::endl;
}
请注意,返回 0 或 1 并有效地提供与不幸的是仅在 C++20 中引入的std::set::count()
功能相同的功能。std::set::contains()
这还不错,因为它可能会跳过一些比较。考虑到设置和拆卸设备的额外工作,它仍然不会更有效率。但是,如果您的代码被更频繁地调用,则通过重新使用集合会变得更好:
static const std::set<std::string> extensions{"zip", "7z", "gz", "tar"};
if (extensions.count(fExt)) {
std::cerr << "yes" << std::endl;
}
有争议的是,它是否会比进行四个字符串比较更有效,但它可能也不会更糟;并且可能更容易维护。
您也可以使用unordered_set
,但是对于像您的情况这样的少量元素,它将进行更多不必要的计算。
推荐阅读
- unix - awk 除法不四舍五入
- python - 如何获取二维 numpy 数组中每一行的前 2 个值的索引,但不包括特定区域?
- selenium - 为什么我得到这个例外?线程“主”org.openqa.selenium.ElementClickInterceptedException 中的异常:
- c++ - C++,Visual Studio 2019,类错误,变量是非标准语法
- java - Firebase addListenerForSingleValueEvent 数据快照返回 null
- powershell - 使用查找文件和创建参数的 Powershell 转换批处理命令
- google-sheets - 当我在 Google 表格中向下拖动公式时,单元格未更新
- c# - 如何将对象序列化为 JSON 并将其异步写入 .Net Core 3.1 中的管道?
- azure-devops - ADO 管道变量使用已安装的 nuget 版本作为变量
- java - Java Selenium 3.14 和 Edge Chromium - 如何开始工作?