c++ - 如何将字典添加到向量中?
问题描述
我正在尝试填充map<string, vector<map<string,string>> >
GrocerDict 形式的字典,但遇到了无法从字典中获取键和值字符串的问题。在map<string, vector<map<string,string>> >
groceryDict 中,第一个键表示杂货项目的类型,即:水果、蔬菜或肉类。该键值是字典向量。向量的每个字典项目都有项目名称和数量,即:西红柿:2 或草莓:5。
- 我尝试了以下代码:
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::pair' 转换为 'std::pair &'
解决方案
我认为您使用的数据类型不正确。用于
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);
}
推荐阅读
- android - 如何在 BottomNavigationView 上方显示 Snackbar 并移动 FAB?
- ios - 如何在 Swift 的 collectionView 中显示每个类别的多个类别?
- python - 如何比较 2 个数据框并生成新的数据框
- java - 如何停止下载管理器下载我的下载中已经存在的文件?
- php - 自动完成引导 php mysql
- firebase - firebase_messaging 如何清除通知?
- node.js - Node.js PUT API 请求在服务器重新启动时第一次失败。其余时间工作
- ruby-on-rails - 如何在“术语”查询中转义特殊符号
- swift - 我如何在 swift 5 上使用推送视图控制器?
- java - JavaFX - 使用字符输入定位图像