【问题标题】:Find and sort list查找和排序列表
【发布时间】:2011-10-25 19:17:03
【问题描述】:

所以我有一个这样的 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 号保存在某处,并对其他项目执行相同操作而不重复前一个项目。有人告诉我地图在这里很有用,但我不知道如何使用它们。

【问题讨论】:

    标签: c++ list sorting map


    【解决方案1】:

    使用key为ID号,value为数量的map:

    std::map<int, int> quantities;
    

    遍历您的列表并更新地图中的相应条目。您可以使用地图上的[] 运算符来访问与给定键对应的值。例如,如果您有一个 ID 和数据中的数量,您可以这样做:

    quantities[id] += quantity;
    

    无需初始化映射即可工作,因为如果 [] 运算符要求映射中尚不存在的条目,则会自动插入默认值,int 的默认值为零.

    现在,您可以浏览地图并查找所有商品的价格。地图的迭代器为您提供pair,其中第一个元素是地图的键,第二个元素是该键的值。您可以编写这样的循环来打印地图的内容:

    for (std::map<int, int>::const_iterator it = quantities.begin();
        it != quantities.end();
        ++it)
    {
      std::cout << it->first << " " << it->second << std::endl;
    }
    

    如果您找到每件商品的价格并将其乘以 it-&gt;second,您就会得到您想要的东西。

    【讨论】:

    • 这太棒了。如何从地图中获取数量值。它只是数量[ID]吗?这会返回该特定项目的数量吗?
    • 是的,就是这样,理查德。
    【解决方案2】:

    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 容器一样。

    【讨论】:

      【解决方案3】:

      我会定义一个结构product 来保存有关每个项目的信息。该结构将保存IDquantityprice
      您将创建一个std::map&lt;int, product&gt;,其中索引是项目的ID
      您将阅读价格文件,并为每一行创建一个带有 ID 和价格的新 product,然后将其添加到您的地图中,并以 ID 作为索引。
      然后,您将读取销售文件,对于每一行,通过 ID 从地图中的引用获取 product,并将数字添加到 quantity
      最后,您将遍历地图,并写出每个ID,以及quantity 的排序乘以price

      我理解正确吗?

      【讨论】:

        【解决方案4】:

        这看起来像一个关系数据库设置。 一个表将包含 [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++”以了解如何读取文件。

        【讨论】:

          猜你喜欢
          • 2016-03-30
          • 2014-02-22
          • 1970-01-01
          • 1970-01-01
          • 2017-05-11
          • 2016-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多