Как я могу добавить словари в вектор? - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь заполнить словарь в форме map<string, vector<map<string,string>> > groceryDict, но у меня возникла проблема, из-за которой я не могу получить строки ключей и значений из словаря. В map<string, vector<map<string,string>> > groceryDict первый ключ представляет тип продукта, т. Е. Фрукты, овощи или мясо. Это значение ключа является вектором словарей. У каждого словарного элемента вектора есть название и количество элементов, т.е.: помидоры: 2 или клубника: 5.

  1. Я пробовал следующий код:
    vector<map<string, string>>rowVect;
    map<string,string> rowDict={{'Bananas','2'}{'Apples','5'}};
    for (map<string, string>::iterator it = rowDict.begin(); it != 
    rowDict.end();it++) {
     string x = it->first;
     string y = it->second;
     rowVect.push_back({x,y});
     }
Я также попробовал следующий код:
    vector<pair<string, string>>rowVect;
    map<string,string> rowDict={{'Bananas','2'}{'Apples','5'}};
    std::transform(rowDict.begin(), rowDict.end(), back_inserter(rowVect), 
    [&](std::pair<string,string> &p) {rowVect.push_back( p ); });

Я ожидал, что код скомпилируется, но вместо этого я получил следующие ошибки:
1. Ошибка C2675 унарная '++':«_Iter» не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора
2. Ошибка C2664 :: operator () (std :: pair &) const ': невозможно преобразовать аргумент 1 из' std ::пара 'to' std :: pair & '

1 Ответ

1 голос
/ 09 октября 2019

Я думаю, что вы используете неправильный тип данных. Использование

std::map<std::string, std::vector<std::pair<std::string, int>>> groceryDict;

или

std::map<std::string, std::map<std::string, int>> groceryDict;

будет работать лучше.

Должен работать следующий блок кода.

std::vector<std::pair<std::string, int>> rowVect;

std::map<std::string, int> rowDict = {{"Bananas", 2}, {"Apples", 5}};
for ( auto& item: rowDict )
{
   std::string x = item.first;
   int y = item.second;
   rowVect.push_back({x, y});
}

илиболее простая версия цикла for.

for ( auto& item: rowDict )
{
   rowVect.push_back(item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...