readability-container-contains¶
Finds usages of container.count()
and container.find() == container.end()
which should be replaced by a call to the container.contains()
method introduced in C++ 20.
Whether an element is contained inside a container should be checked with contains
instead of count
/find
because contains
conveys the intent more clearly. Furthermore, for containers which permit multiple entries per key (multimap
, multiset
, …), contains
is more efficient than count
because count
has to do unnecessary additional work.
Examples:
Initial expression | Result |
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) |
This check applies to std::set
, std::unordered_set
, std::map
, std::unordered_map
and the corresponding multi-key variants.
It is only active for C++20 and later, as the contains
method was only added in C++20.