如何在mdspan中查找元素

问题描述 投票:0回答:1

如何在 c++23 std::mdspan 中查找元素?假设有一些 2D mdspan。如何找到一个元素并获取它的二维索引?

我想我可以调用 data_handle() 来访问底层数据并进行一维数组搜索,但这会给我一个一维索引。 mdspan 是否提供了将其映射回 2D 索引的方法?

c++ std c++23 mdspan
1个回答
0
投票

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

演示:https://godbolt.org/z/4PE4f5968

© www.soinside.com 2019 - 2024. All rights reserved.