readability-container-contains

查找使用 container.count()container.find() == container.end(),它们应该被调用 container.contains() 方法替换。

是否应该使用 contains 而不是 count/find 检查元素是否包含在容器中,因为 contains 更清楚地传达了意图。此外,对于允许每个键有多个条目的容器(multimapmultiset 等),containscount 更有效,因为 count 需要做不必要的额外工作。

示例

初始表达式

结果

myMap.find(x) == myMap.end()

!myMap.contains(x)

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

myMap.contains(x)

if (myMap.count(x))

if (myMap.contains(x))

bool exists = myMap.count(x)

bool exists = myMap.contains(x)

bool exists = myMap.count(x) > 0

bool exists = myMap.contains(x)

bool exists = myMap.count(x) >= 1

bool exists = myMap.contains(x)

bool missing = myMap.count(x) == 0

bool missing = !myMap.contains(x)

此检查将适用于任何具有 contains 方法的类,特别是包括 std::setstd::unordered_setstd::mapstd::unordered_map(从 C++20 开始),以及 std::stringstd::string_view(从 C++23 开始)。