我想有两种类型:
类似这样的东西:
using mapType = std::unordered_map<K, std::pair<V, typename orderType>>;
using orderType = std::list<typename mapType::iterator>;
这不起作用,因为第一行中未定义orderType。即使是某种方式,这也会导致无限类型的递归。
如何声明这些类型?有没有办法以某种方式使用没有隐式列表类型的列表迭代器?
编辑:我不想存储K类型的任何其他副本,它们很大。
答案 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/