如何使用 std::lower_bound 比较没有第二个对象的对象变量
How to use std::lower_bound to compare object variables without second object to compare with
我想将我的 "WorldChunk" class 函数 "getX()" 和 "getY()" 与传递给函数的 "chunk_x" 和 "chunk_y" 进行比较,但是我不想创建 "WorldChunk" 的新实例来与之比较。
我试过类似的方法,但没有用。
int ChunkGrid::unload_chunk(unsigned int chunk_x, unsigned int chunk_y)
{
auto chunk = std::lower_bound(loaded_chunks.begin(), loaded_chunks.end(), NULL,
[chunk_x, chunk_y](const WorldChunk& ch, const auto * null)
{
return (ch.getX() == chunk_x && ch.getY() == chunk_y) ? true : false;
});;
//rest of the function
}
错误日志:
Error C2672 'operator __surrogate_func': no matching overloaded function found.
Error C2784 'auto ChunkGrid::unload_chunk::<lambda_d0b216222e2c66d42cf1e3316f6d68ac>::operator ()(const WorldChunk &,const _T1 *) const': could not deduce template argument for 'const _T1 *' from 'const _Ty'
您遇到的问题是您试图通过 lambda 捕获而不是通过参数来传递比较值。只要正确地做;不要求第三个参数的类型与迭代器的 value_type
类型相同:
int ChunkGrid::unload_chunk(vec2<unsigned int> chunk_loc)
{
auto chunk = std::lower_bound(loaded_chunks.begin(), loaded_chunks.end(), chunk_loc,
[](const WorldChunk& ch, const vec2<unsigned int> &loc)
{
return (ch.getX() < loc.x && ch.getY() < loc.y) ? true : false;
});;
//rest of the function
}
您的真正问题是 lower_bound
不是通用搜索函数(即 std::find
)。它要求 loaded_chunk
序列相对于搜索函数进行排序(或至少根据测试值进行分区)。即,与值比较为真的所有元素必须位于与值比较为假的所有元素之前。因此,除非您按 X/Y 位置对这个块列表进行排序(按照确切的顺序;X < X,然后是 Y < Y),否则这是行不通的。
我想将我的 "WorldChunk" class 函数 "getX()" 和 "getY()" 与传递给函数的 "chunk_x" 和 "chunk_y" 进行比较,但是我不想创建 "WorldChunk" 的新实例来与之比较。
我试过类似的方法,但没有用。
int ChunkGrid::unload_chunk(unsigned int chunk_x, unsigned int chunk_y)
{
auto chunk = std::lower_bound(loaded_chunks.begin(), loaded_chunks.end(), NULL,
[chunk_x, chunk_y](const WorldChunk& ch, const auto * null)
{
return (ch.getX() == chunk_x && ch.getY() == chunk_y) ? true : false;
});;
//rest of the function
}
错误日志:
Error C2672 'operator __surrogate_func': no matching overloaded function found.
Error C2784 'auto ChunkGrid::unload_chunk::<lambda_d0b216222e2c66d42cf1e3316f6d68ac>::operator ()(const WorldChunk &,const _T1 *) const': could not deduce template argument for 'const _T1 *' from 'const _Ty'
您遇到的问题是您试图通过 lambda 捕获而不是通过参数来传递比较值。只要正确地做;不要求第三个参数的类型与迭代器的 value_type
类型相同:
int ChunkGrid::unload_chunk(vec2<unsigned int> chunk_loc)
{
auto chunk = std::lower_bound(loaded_chunks.begin(), loaded_chunks.end(), chunk_loc,
[](const WorldChunk& ch, const vec2<unsigned int> &loc)
{
return (ch.getX() < loc.x && ch.getY() < loc.y) ? true : false;
});;
//rest of the function
}
您的真正问题是 lower_bound
不是通用搜索函数(即 std::find
)。它要求 loaded_chunk
序列相对于搜索函数进行排序(或至少根据测试值进行分区)。即,与值比较为真的所有元素必须位于与值比较为假的所有元素之前。因此,除非您按 X/Y 位置对这个块列表进行排序(按照确切的顺序;X < X,然后是 Y < Y),否则这是行不通的。