C++ 包含映射迭代器的映射

C++ 包含映射迭代器的映射,c++,c++11,C++,C++11,考虑以下类别: #include <string> #include <vector> #include <map> class a { private: struct map_vector; typedef std::map <std::string, map_vector>::iterator map_iterator; struct map_vector { std::vector <

考虑以下类别:

#include <string>
#include <vector>
#include <map>

class a
{
private:
    struct map_vector;

    typedef std::map <std::string, map_vector>::iterator map_iterator;

    struct map_vector
    {
        std::vector <map_iterator> my_vec;
    };
private:
    std::string my_string;
    std::map <std::string, map_vector> my_map;
public:
    a() : my_string("\0")
    {
        my_map.insert(std::pair <std::string, map_vector>(my_string, map_vector()));
    };

    void addToken(const std::string &token)
    {
        // add current token if it does not exist
        map_iterator a_it1 = my_map.find(token);
        if(a_it1 == my_map.end())
        {
            std::pair <map_iterator, bool> res = my_map.insert(std::pair <std::string, map_vector>(token, map_vector()));
            a_it1 = res.first;
        }

        // add iterator of current token to previous token
        map_iterator a_it2 = my_map.find(my_string);
        a_it2->second.my_vec.push_back(a_it1);

        // set previous token to current token
        my_string = token;
    }
};
我查看了以下链接:

  • (这一点尤其重要,但我更希望有一张地图 迭代器(而不是我的结构中的映射指针)
相关的,似乎答案就是你所做的。此外,根据标准,实例化类型不完整的容器(如上面的map_vector)是UB(“效果未定义…如果在实例化模板组件时将不完整的类型用作模板参数”-17.4.3.6,第2段;这是标准中讨论标准库对用户组件的一般要求的部分。)目前无法验证。
a_it2->second.push_back(a_it1);