我需要两种不同类型的值的双射映射。我使用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!
查看n4510我没有看到std::map
,但在上面的示例中看来,实际上(至少在当前的 libc ++ 中)成员typedef(或类型)别名)std::map::iterator
不依赖于mapped_type
(以及value_type
)的完整性。
尽管Stadnard(in)使用不完整类型作为mapped_type
的一致性,我可以肯定,std::map::iterator
始终是类(将其用作基础类)?
可以将std::map::iterator
实现为指针,而不是类吗?比方说,std::vector
的迭代器的调试版本通常不是指针。