mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
cleanup: implement index_of() and index_of_if() generics
Search the index of an item in a container. Compare by equality or a lambda. The lack of these have annoyed me for a long time. Return the index of the first found element or -1 if no element found. Currently, only supports random-access operators. Might be trivially changed for forward iterators. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
df5bf728f9
commit
691d9e86de
3 changed files with 23 additions and 19 deletions
16
core/range.h
16
core/range.h
|
@ -82,4 +82,20 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
// Find the index of an element in a range. Return -1 if not found
|
||||
// Range must have a random access iterator.
|
||||
template <typename Range, typename Element>
|
||||
int index_of(const Range &range, const Element &e)
|
||||
{
|
||||
auto it = std::find(std::begin(range), std::end(range), e);
|
||||
return it == std::end(range) ? -1 : it - std::begin(range);
|
||||
}
|
||||
|
||||
template <typename Range, typename Func>
|
||||
int index_of_if(const Range &range, Func f)
|
||||
{
|
||||
auto it = std::find_if(std::begin(range), std::end(range), f);
|
||||
return it == std::end(range) ? -1 : it - std::begin(range);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue