从地图构造跨度

Mad*_*den 1 c++ llvm-clang c++20

我有一张地图,我希望返回一个跨度,如下所示

map<string, map<string, Struct>> map;
span<pair<string, map<string, Struct>>> s {map.begin(), map.end()};
Run Code Online (Sandbox Code Playgroud)

编译失败,抱怨没有已知的从 map::iterator 到 span 模板类型的转换。我不确定为什么会失败,因为据我了解,迭代器范围构造函数应该将映射迭代器分解(成对>),然后将其“复制”过来。我在这里缺少什么?

使用 clang8 编译

bol*_*lov 5

std::span只能用于内存中连续且全等元素的集合,但事实std::map并非如此。

std::span

类模板 span 描述了一个对象,该对象可以引用连续的对象序列,该序列的第一个元素位于位置 0。

典型的实现仅包含两个成员:指向 T 的指针和大小。