我如何定义一个list :: iterator和map :: iterator的列表 [英] How I can define a list of map::iterator and map of list::iterator

查看:140
本文介绍了我如何定义一个list :: iterator和map :: iterator的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  typedef std :: list< Map :: iterator>列表; 
typedef std :: map< int,List :: iterator>地图;

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

  #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(pairs);
assert(result.second);
auto map_it = result.first;
list_it-> second = map_it;

std :: cout<< list_it-> second->第一<< std :: endl;
std :: cout<< map_it-> second.it->第一<< std :: endl;
}


I need a list of Map::iterator and map of List::iterator. How I can do this:

typedef std::list<Map::iterator> List;
typedef std::map<int, List::iterator> Map;

Maybe I can use something like forward declaration for iterator?

解决方案

Something like this should help you:

#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;
}

这篇关于我如何定义一个list :: iterator和map :: iterator的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆