C++ 我可以使用std::map::iterator作为类的基础吗?

C++ 我可以使用std::map::iterator作为类的基础吗?,c++,inheritance,stl,iterator,incomplete-type,C++,Inheritance,Stl,Iterator,Incomplete Type,我需要两种不同类型的值的双射映射。我使用了std::maps。真实代码的一部分: struct endpoint { site l, r; pedge e; }; struct endpoint_less { // comparator definition for `endpoint` }; struct pevent; // forward declaration using endpoints = std::map< endpoint, pevent,

我需要两种不同类型的值的双射映射。我使用了
std::map
s。真实代码的一部分:

struct endpoint
{
    site l, r;
    pedge e;
};

struct endpoint_less
{
     // comparator definition for `endpoint`
};

struct pevent; // forward declaration
using endpoints = std::map< endpoint, pevent, endpoint_less >;
using pendpoint = typename endpoints::iterator;

struct vertex { value_type x, y, R; };

struct event_less
{
    // comparator definition for `vertex`
};

using events = std::map< vertex, std::deque< pendpoint >, event_less >;
struct pevent { typename events::iterator ev; }; // currently I use composition
struct pevent : typename events::iterator {}; // but I want to use inheritance - it is much more convenient!
struct端点
{
场地l,r;
佩奇e;
};
无结构端点
{
//“端点”的比较器定义`
};
结构pevent;//远期申报
使用endpoints=std::map;
使用pendpoint=typename端点::迭代器;
结构顶点{value_type x,y,R;};
无结构事件
{
//顶点的比较器定义`
};
使用events=std::map,event_less>;
结构pevent{typename事件::迭代器ev;};//目前我使用构图
struct pevent:typename事件::迭代器{};//但是我想使用继承-它更方便!
查看一下,我没有看到
std::map
,但在上面的示例中,似乎实际上(至少在当前的libc++中)成员typedef(或类型别名)
std::map::iterator
并不依赖于
mapped\u type
的完整性

尽管Stadnard(In)使用不完整类型作为
mapped_type
是一致的,但我可以确定
std::map::iterator
始终是一个类(将其用作基类)


std::map::iterator
可以实现吗,比如说,作为指针,而不是类?比如说,
std::vector的迭代器的非调试版本通常是指针。

怎么了???不清楚我在问什么?有
标记可以从视觉上区分疑问句和陈述句。我确信问题尽可能清楚,并且有价值。因为它习惯于使用
std::map
s(双射映射-这是一个有价值的应用程序,在实践中经常出现)。如果
std::map::iterator
依赖于
mapped\u类型,实际上是一个库实现问题。大多数编译器供应商都实现了“可怕的迭代器”,并消除了这种依赖性。但以这种方式实施并不是强制性的。C++11标准允许但不要求它。对于
向量
类,由于其要求,它可以实现为原始指针。但是对于
map
,我不知道如何在不使用类(或结构)的情况下实现其迭代器。例如,
operator++
并不仅仅是给指针添加一个固定的值。@Gonmator可以想象这样一个硬件,它有专门为树组织的内存。这种处理器上的指针可以根据需要运行。