Проблема в том, что вы пытаетесь передать значение сравнения через лямбда-захват, а не через параметры. Просто сделай это правильно;не требуется, чтобы тип третьего параметра соответствовал типу итераторов 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