Изменение значения итератора в рекурсивной функции - PullRequest
0 голосов
/ 12 июля 2020

Функция выполняет итерацию по карте, если значение является строкой, она добавляет его к тексту строки, если это карта, она вызывает функцию и т. Д.

string functest(map<string, any> input) 
{
    string text;
    std::map<std::string, std::any>::iterator it;
    for (it = input.begin(); it != input.end(); it++)
    {
        
        std::string key = it->first;
        auto value = it->second;
        std::string type = value.type().name();
        std::string stringType = typeid(std::string).name();
        if (!stringType.compare(type))
        {
            text.append(any_cast<std::string>(value));
        }
        else
        {
            map<string, any> temp = any_cast<map<string, any>>(value);
            text.append(functest(temp));
        }
    }
    return text
}
std::map<std::string, std::any> map1;
std::map<std::string, std::any> map2;
std::map<std::string, std::any> map3;
map2["1"] = "test";
map3 = map2;
map1["test"] = map2;
map1["test2"] = map3;

functest(map1);

после второго вызова functest возвращаемся к первому звонку. Однако значение его (итератора) является концом, а не тем, на котором оно остановилось. как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...