Skip to content

Latest commit

 

History

History
25 lines (19 loc) · 1.69 KB

readability-container-contains.rst

File metadata and controls

25 lines (19 loc) · 1.69 KB

clang-tidy - readability-container-contains

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.