在数组中计算类似的iTems

时间:2010-05-07 11:33:42

标签: c++ c

我需要计算数组中的相似元素。例如,如果我有一个数组, 数组[0,0,0,1,2,3,3] .0的数量是3,没有。 1的是1,没有。 2的是1,没有。这个数组中3的3是2。如果此消息已经发布,我很抱歉。感谢帮助。提前谢谢。

此致

THM

P.S:语言是C / C ++

3 个答案:

答案 0 :(得分:5)

您可以使用std :: map来存储和调整基于数组条目的结果,同时迭代数组。我希望这个提示有助于你的任务。

答案 1 :(得分:2)

我可以想到几个选项:

  1. 将数组复制到std::multiset<>,然后使用count()equal_range()成员函数返回计数

  2. 创建std::map<T,unsigned>。映射键(数组条目类型T,将是您示例中的整数类型)是数组条目,值是计数。每次在迭代数组时遇到具有该值的元素时,递增与值关联的计数

  3. 如果对数组进行排序,请使用std::equal_range()查找连续的相等元素,并对其进行计数。

  4. 当然还有更多,包括迭代和直接计算。

答案 2 :(得分:0)

啊,我认为这是一个家庭作业。如果我错了,请纠正我。

如果我要求您实施算法,您会怎么做?您可以从示例输入中看到,当输入分组时,更容易计算每个组的成员,而不是按任意顺序进行混洗。如果您对输入进行排序,那么您将获得分组的各种元素。然后,您只需要迭代序列一次,以便计算每个组的成员。

当算法运行时,尝试对其进行优化,使其不会多次读取输入序列的元素。如果您能够保证每个元素只读取一次,并且元素从头到尾按顺序读取,那么您的算法将直接从输入流(如stdin)进行输入(只要它将被排序),无需先将输入流中的输入复制到临时容器中。