75 lines
1.2 KiB
C++
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;
|
|
}
|
|
|
|
} |