包含地图迭代器的地图

时间:2015-01-25 05:10:58

标签: 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 <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子对象或重做它?我不知道如何做到这一点,因为我需要一张<string, map iterator>地图,地图迭代器指的是原始地图本身。

例如,如果在addToken中,我可以直接执行以下操作:

a_it2->second.push_back(a_it1);

我查看了以下链接:

0 个答案:

没有答案
相关问题