如何在 c++23 std::mdspan 中查找元素?假设有一些 2D mdspan。如何找到一个元素并获取它的二维索引?
我想我可以调用 data_handle() 来访问底层数据并进行一维数组搜索,但这会给我一个一维索引。 mdspan 是否提供了将其映射回 2D 索引的方法?
将
std::ranges::find
与自定义投影一起使用。
#include <vector>
#include <algorithm>
#include <iostream>
#include <ranges>
int main(){
std::vector vec = {1, 2, 3, 4, 5, 6, 7, 88, 9, 10, 11, 12};
auto ms = std::mdspan(vec.data(), 2, 6);
auto coeff_view = std::views::cartesian_product(std::views::iota(0uz, ms.extent(0)),
std::views::iota(0uz, ms.extent(1)));
auto iter = std::ranges::find(coeff_view, 88, [ms](const auto rc){
auto [r,c] = rc;
return ms[r, c];
});
auto [foundr, foundc] = *iter;
std::cout << foundr << "," << foundc << '\n';
}
以上输出
1,1
。