C ++两种彼此依赖的类型

时间:2019-12-12 20:07:07

标签: c++ types

我想有两种类型:

  1. 将K型映射到V型对,并将迭代器映射到第二种元素的Unordered_map
  2. 地图元素的迭代器列表

类似这样的东西:

using mapType = std::unordered_map<K, std::pair<V, typename orderType>>;
using orderType = std::list<typename mapType::iterator>;

这不起作用,因为第一行中未定义orderType。即使是某种方式,这也会导致无限类型的递归。

如何声明这些类型?有没有办法以某种方式使用没有隐式列表类型的列表迭代器?

编辑:我不想存储K类型的任何其他副本,它们很大。

1 个答案:

答案 0 :(得分:0)

由于映射迭代器仅需要对值类型的前向引用,因此您可以使用中间类型来打破循环:

struct orderType : std::list<std::map<K, std::pair<V, orderType>>::iterator> {
    using std::list<std::map<K, std::pair<V, orderType>>::iterator>::list;
};
using mapType = std::map<K, std::pair<V, orderType>>;

用法:

int main() {
    K k1 = GetK1();
    K k2 = GetK2();
    V v = GetV();

    mapType m;
    m.insert({ k1, { v, orderType{} }});
    m.insert({ k2, { v, orderType{} }});
    m[k1].second.push_back(m.find(k2));
    m[k2].second.push_back(m.find(k1));
}

PoC演示:https://godbolt.org/