所以我有一个2列的列表,如下所示:
2834 2
2934 1
2712 1
2834 3
2889 1
2659 1
2934 1
2760 1
2173 1
2834 1
2760 1
2834 2
第一列是商品ID,第二列是购买商品的数量,每个商品的价格在另一个文件中。我需要做的是找到订购的每件商品的总数量,再乘以其价格,然后按收入显示前五项。 例如,2834以上订购8次,价格为2美元,因此2834的总收入为16美元。如何找到一个项目的所有出现次数(数量),在某处保存其数量和ID号,并对其他项目执行相同操作,而不重复上一个项目。我被告知地图在这里很有用,但我不知道如何使用它们。
答案 0 :(得分:4)
使用地图,其中键是ID号,值是数量:
std::map<int, int> quantities;
循环浏览列表并更新地图中的相应条目。您可以使用地图上的[]
运算符来访问与给定键对应的值。例如,如果您有数据和数据中的数量,则可以执行以下操作:
quantities[id] += quantity;
无需初始化地图即可工作,因为如果[]
运算符要求地图中尚不存在的条目,则会自动插入默认值,并且{{1}的默认值是零。
现在,您可以浏览地图并查找所有商品的价格。 map的迭代器为您提供int
,其中第一个元素是地图的键,第二个元素是该键的值。您可以编写这样的循环来打印地图的内容:
pair
如果您找到每件商品的价格并乘以for (std::map<int, int>::const_iterator it = quantities.begin();
it != quantities.end();
++it)
{
std::cout << it->first << " " << it->second << std::endl;
}
,那么您将拥有所需的商品。
答案 1 :(得分:1)
std :: map会很有用 - 它基本上是一个由键索引的数组。在您的情况下,项目ID将是关键。通常,您只需在地图中放置一个元素:
myMap[key] = value;
例如,假设readFromFile()填写id和qty:
// Declare a map that uses an int as a key, and an int as a value
std::map<int, int> myMap;
while (readFromFile(&id, &qty))
{
myMap[id] += qty;
}
第一次,[]将创建元素。要迭代最终列表,您可以在地图上使用标准迭代器,就像其他STL容器一样。
答案 2 :(得分:0)
我会定义一个结构product
来保存每个项目的信息。结构将包含ID
,quantity
和price
您可以创建一个std::map<int, product>
,其中索引是项目的ID
您可以在价格文件中读取,并为每一行创建一个新的product
ID
和价格,然后将ID
作为索引添加到地图中。
然后,您将在销售文件中读取,并且对于每一行,通过product
的地图引用ID
,并将数字添加到quantity
。
最后,您将遍历地图,并写出每个ID
,并quantity
有序乘以price
。
我理解正确吗?
答案 3 :(得分:0)
这看起来像是一个关系数据库。 一个表格将包含[Item_ID,Quantity]等记录 另一个表将包含[Item_ID,Price]等记录。
您的任务,如果您选择接受它,就是为每个文件创建一个表。使用第一个表中的Item_ID查找数量。使用Item_ID到第二个表中查找价格。将这两个变量相乘以确定Item_ID的总成本:
unsigned int quantity = Quantity_Table[Item_ID];
double price = Price_Table[Item_ID];
double cost = price * quantity;
首先研究std::map
数据结构。同时搜索Stack Overflow for“get getline c ++”以了解如何读取文件。