主程序必须将购物清单存储在名为:lists的键值对的映射中。密钥必须是包含杂货店名称的字符串,并且值必须是包含该商店的商品清单的字符串向量。
我正在使用的功能
void CreateList()
{
std::string store;
std::string item;
std::cout << "What is the grocery store name" << std::endl;
std::cin >> store;
std::vector<std::string> store_list;
do {
std::cout << "Enter a list of items for this grocery store one at a time. When you are done, type done." << std::endl;
std::cin >> item;
if (item == "done") break;
store_list.emplace_back(item);
std::cout << "Added " << item << "to " << store << "list" << std::endl;
} while (true);
main()的 {
while (true)
{
int choice;
DisplayMenu();
cout<<"What menu choice would you like?"<<endl;
cin>>choice;
if (choice == 1)
CreateList();
if (choice == 2)
ExportLists();
if (choice == 3)
cout<<"Thank you for using!"<<endl;
break;
else
cout<<"Please enter a valid choice."<<endl;
}
map<string, vector<string> > list;
map<string, vector<string> >::iterator ListItr;
vector<string>::iterator VecItr;
for (ListItr = list.begin(); ListItr != list.end(); ++ListItr)
{
for (VecItr = ListItr ->second.begin();
VecItr != ListItr ->second.end();
++VecItr)
{
list[store].push_back(*VecItr);
}
}
我的问题是我无法弄清楚如何正确迭代在CreateList()中创建的向量,并将该向量中的项添加到地图中,我也很难弄清楚如何获得杂货商店名称。我是否必须让CreateList()函数返回一些内容才能执行此操作?这是我第一次尝试从python转换到C ++程序,所以请简化所有答案。谢谢你的时间。
答案 0 :(得分:1)
您可以在第一个while循环中填充商店地图。 以下程序演示了如何填充地图以及如何迭代地图中的项目。
#include <iostream>
#include <vector>
#include <string>
#include <map>
typedef std::vector<std::string> items_t;
typedef std::pair<std::string, items_t> store_t;
typedef std::map<std::string, items_t> stores_t;
store_t CreateList()
{
std::string store;
std::string item;
std::cout << "What is the grocery store name" << std::endl;
std::cin >> store;
std::vector<std::string> store_list;
while((
std::cout << "Enter a list of items for this grocery store one at a time."
<< "When you are done, type done." << std::endl,
std::cin >> item,
item != "done"))
{
store_list.emplace_back(item);
std::cout << "Added " << item << " to " << store << " list" << std::endl;
}
return store_t(store,store_list);
}
void DisplayMenu() {
std::cout << "DisplayMenu()\n";
}
int main() {
stores_t stores;
int choice;
do {
DisplayMenu();
std::cout<<"What menu choice would you like?\n";
std::cin>>choice;
switch (choice) {
case 1:
{
stores.emplace(CreateList());
}
break;
case 2:
// not implemented
case 3:
std::cout<<"Thank you for using!\n";
break;
default:
std::cout<<"Please enter a valid choice.\n";
}
} while (choice != 3);
// Look what stores we have:
for(auto iter=stores.begin(); iter != stores.end(); iter++) {
std::cout << "\n\nStore " << iter->first << " has the following items:\n";
items_t& items(iter->second);
for(auto iterItem=items.begin(); iterItem != items.end(); iterItem++) {
std::cout << *iterItem << ", ";
}
}
return 0;
}
然而,代码需要进一步清理才能用于实际程序。
是否可以将CreateList()
作为返回值检索商店。
注意,您应该始终在stackoverflow上发布编译最小示例。如果编译器给出错误,则发布最小的示例以及相应的错误消息。
答案 1 :(得分:0)
尝试简化答案: CreateList()应返回一对:
pair<string, vector<string>>
是store_name(string),item_list(vector)。
因此在main函数中,您可以将其插入到map&gt;列表:
list.insert(pair<string, vector<string>>);
您的其他代码对我来说很合适。