首页 > 解决方案 > 从地图构建跨度

问题描述

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

map<string, map<string, Struct>> map;
span<pair<string, map<string, Struct>>> s {map.begin(), map.end()};

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

用clang8编译

标签: c++llvm-clangc++20

解决方案


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

std::span

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

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


推荐阅读