Files
dl/dl/base/dl_range_find.h
T
2026-09-16 14:07:40 +08:00

75 lines
1.2 KiB
C++

/**
* @file dl_range_find.h
* @brief 查找
*
*
* @version 1.0
* @author lveyou
* @date 23-06-22
*
* @note
*/
#pragma once
#include "base/dl_vector2.h"
//! 查找算法
namespace dl::Find
{
/**
* @brief find,返回下标
* @note 失败返回-1
*/
template<typename T, typename V>
size_t FirstIndex(const T& container, const V& v)
{
for (size_t i = 0; i < container.size(); ++i)
{
if (container[i] == v)
{
return i;
}
}
return -1;
}
/**
* @brief find,返回下标
* @note 失败返回 -1, -1
*/
//template<typename T, typename V>
//SizeT FirstIndex(const Vector2<T, size_t>& container, const V& v)
//{
// for (size_t j = 0; j < container.GetHeight(); ++j)
// {
// for (size_t i = 0; i < container.GetWidth(); ++i)
// {
// if (container.Get(j, i) == v)
// {
// return { i, j };
// }
// }
// }
// return { -1_zu, -1_zu };
//}
/**
* @brief find,返回指针
* @note 失败返回nullptr
*/
template<typename C, typename F>
auto FirstYes(C& container, F func)
{
for (auto& iter : container)
{
if (func(iter))
{
return &iter;
}
}
using V = std::decay_t<decltype(container)>;
using T = typename V::value_type;
return (T*)nullptr;
}
}