查找和排序列表
Find and sort list
我有一个包含两列的列表,像这样:
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号在某个地方,并为其他项目做同样的事情,而不重复前一个项目。我被告知地图在这里很有用,但我不知道如何使用。
使用键为ID号,值为数量的映射:
std::map<int, int> quantities;
循环遍历列表并更新映射中相应的条目。您可以在映射上使用[]
操作符来访问与给定键对应的值。例如,如果您有ID和数据中的数量,您可以这样做:
quantities[id] += quantity;
不需要初始化映射,因为如果[]
操作符请求映射中不存在的项,它会自动插入一个默认值,而int
的默认值为0。
现在,你可以在地图上找到你所有物品的价格。映射的迭代器为您提供一个pair
,其中第一个元素是映射的键,第二个元素是该键的值。您可以编写这样的循环来打印映射的内容:
for (std::map<int, int>::const_iterator it = quantities.begin();
it != quantities.end();
++it)
{
std::cout << it->first << " " << it->second << std::endl;
}
如果你找到每件商品的价格并乘以it->second
,你就得到了你要找的东西。
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;
}
第一次通过时,[]将创建元素。要遍历最终列表,可以在map上使用标准迭代器,就像其他STL容器一样。
我将定义一个结构体product
来保存每个项目的信息。该结构体将保存ID
、quantity
和price
。
您将创建一个std::map<int, product>
,其中索引是项目的ID
。
您将读取price文件,并为每一行使用该ID
和price创建新的product
,然后将其添加到映射中,以ID
作为索引。
然后读取销售文件,对于每一行,从映射中引用ID
获取product
,并将数字添加到quantity
。
最后,您将遍历映射,并写出每个ID
,以及排序后的quantity
乘以price
。
我理解对了吗?
这看起来像一个关系数据库设置。一个表将有像[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中搜索"while getline c++"来了解如何读取文件。
- 试图在c++中对数字列表进行排序
- 在STL - C++中按成绩对学生列表进行排序?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如何按键对 std::对列表进行排序?
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 使用自定义比较函数在类内进行列表排序
- 列表::排序更改值C
- 对于列表排序,有没有办法使用相同的参数让多个运算符重载?
- 在 c++ 中将数字从列表排序到数组中的气泡排序问题
- 运算符<用于列表排序
- C++列表排序功能
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 列表排序不正确
- 列表排序和结构体向量排序之间的性能差距.c++
- 对抽象数据类型的stl::列表排序
- C++std列表排序使用自定义比较器,该比较器依赖于对象实例的成员变量