我有一个 std::map
和一个 std::list
。我想让容器中的元素具有相反容器迭代器的类型。
我该如何对它们进行typedef?
Example:
typedef std::map<MyKeyClass, typename MyList::iterator> MyMap;
// ^ MyList not defined.
typedef std::list<typename MyMap::iterator> MyList;
当然,交换这两行代码不能解决问题。
我还尝试过:
typedef std::map<MyKeyClass,
typename std::list<typename MyMap::iterator>::iterator> MyMap;
typedef std::list<typename MyMap::iterator> MyList;
但那也不起作用。
更新:
我需要这个是为了通过订单的两个方面来跟踪键/值对。假设我有一个map<KEY,VALUE>
,它按键排序,通过键查找值很快。但我还想通过添加值的时间来跟踪值。我想知道哪个值是最近添加的。为此,我使用列表。我需要从地图中返回迭代器,以便从容器中删除元素。当我通过键删除地图中的元素时,我还需要删除列表中的元素。我还需要相反的操作(删除最近添加的值)。
我发现我的想法是显式使用指针(如注释中所示)不起作用,因为我实际上需要一个迭代器来从容器中删除元素。
更新2:
我之所以问这个问题,是因为我觉得有点奇怪我不能做到这一点。我经常将STL容器用作基本数据结构(像每个人一样)。例如,std::map
可以用作具有显式结构和指针的二叉树的实现替代品。STL容器设计得很好,我没有经历过无法使用STL容器来表达可以通过结构和指针完成的某些结构的情况。它们可能无法保证STL容器具有与结构和指针结构相同的属性。但是,对于这样的简单结构,我感到有点奇怪,我无法使用STL容器来表达它。
struct X { Y y; }; struct Y { X x; };
,不是吗? - Kerrek SBX { Y y; }; struct Y { X x; };
的情况下,你不能前向声明 X 或 Y -- 因为它们需要是完整的类型。前向声明只能用于指针声明,而不是完整类型。 - Soren