C++ 如何定义map::iterator列表和map of list::iterator

C++ 如何定义map::iterator列表和map of list::iterator,c++,list,dictionary,iterator,std,C++,List,Dictionary,Iterator,Std,我需要一个Map::iterator列表和Map of list::iterator。我如何做到这一点: typedef std::list<Map::iterator> List; typedef std::map<int, List::iterator> Map; typedef标准::列表; typedef std::map; 也许我可以使用类似于迭代器的前向声明之类的东西?这样的东西应该可以帮助您: #include <cassert> #incl

我需要一个Map::iterator列表和Map of list::iterator。我如何做到这一点:

typedef std::list<Map::iterator> List;
typedef std::map<int, List::iterator> Map;
typedef标准::列表;
typedef std::map;

也许我可以使用类似于迭代器的前向声明之类的东西?

这样的东西应该可以帮助您:

#include <cassert>
#include <iostream>
#include <list>
#include <map>
#include <string>

struct decl_t {
    typedef std::map<std::string, decl_t> map_t;
    typedef std::list<std::pair<int, typename map_t::iterator>> list_t;

    list_t::iterator it;
};

int main(int argc, const char* argv[])
{
    decl_t::map_t map;
    decl_t::list_t list;

    auto list_it = list.emplace(list.end(), 42, decl_t::map_t::iterator());
    const auto pair = std::make_pair(std::string("key"), decl_t{list_it});
    auto result = map.insert(pair);
    assert(result.second);
    auto map_it = result.first;
    list_it->second = map_it;

    std::cout << list_it->second->first << std::endl;
    std::cout << map_it->second.it->first << std::endl;
}
#包括
#包括
#包括
#包括
#包括
结构声明{
typedef std::map\u t;
typedef std::list\t;
list_t::迭代器;
};
int main(int argc,const char*argv[]
{
decl_t::map_t map;
decl_t::list_t list;
auto list_it=list.emplace(list.end(),42,decl_t::map_t::iterator());
const auto pair=std::make_pair(std::string(“key”),decl_t{list_it});
自动结果=映射插入(成对);
断言(result.second);
自动映射_it=result.first;
列出它->第二个=映射它;

std::cout second->first first听起来像是一个递归定义。你确定这是解决问题的正确方法吗?你想解决什么问题?我确定。如果我只使用普通指针,这不是问题,因为我可以生成前向声明结构/类。在这种情况下,我想使用像普通指针一样的迭代器。因此,你必须一个映射,当给定一个
Int
时,它会将一个
迭代器
返回到一个
列表
,这个映射将一个
迭代器
返回到一个
映射
,这个映射将一个
迭代器
返回到一个“列表”……等等。也许你的解决方案是3种不同的类型?可能的解决方案之一是使用类型擦除,使第二个参数to例如,be
boost::any
。@PazO上面问题中的我的代码只是一个简单的示例,用于说明问题。