【问题标题】:How Can I Add Dictionaries to a Vector?如何将字典添加到向量中?
【发布时间】:2019-10-09 17:30:23
【问题描述】:

我正在尝试填充map<string, vector<map<string,string>> >groceryDict 形式的字典,但我遇到了无法从字典中获取键和值字符串的问题。在map<string, vector<map<string,string>> >groceryDict 中,第一个键代表杂货项目的类型,即:水果、蔬菜或肉类。该键值是字典向量。向量的每个字典项都有一个项名称和数量,即:Tomatoes:2 或 Strawberries: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});
     }
  1. 我也试过下面的代码:
    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::pair”转换为 'std::pair &'

【问题讨论】:

    标签: c++ dictionary iterator transform


    【解决方案1】:

    我认为您使用的数据类型不正确。使用

    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);
    }
    

    【讨论】:

    • 我认为它在向量中使用pair而不是map。感谢您的帮助!
    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 2013-09-28
    • 2016-07-23
    • 1970-01-01
    • 2016-04-14
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多