考虑以下课程:
#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);
我查看了以下链接: