首页 > 解决方案 > 检查变量是否等于这些值中的任何一个

问题描述

在 c++ 中,有没有办法查看变量是否等于其中一个值?现在我必须做

if (fExt == "zip" | fExt == "7z" | fExt == "gz" | fExt == "tar")
    {
        //do something
    }

但是,有没有更有效的方法?

标签: c++

解决方案


带有集合的示例:

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,但是对于像您的情况这样的少量元素,它将进行更多不必要的计算。


推荐阅读