【问题标题】:Counting an int in a vector from a number stored in a set?从存储在集合中的数字中计算向量中的整数?
【发布时间】:2014-04-23 04:50:40
【问题描述】:

所以,这可能听起来令人困惑,但我正在编写一个素数分解方法,并且我试图找出某个数字在向量中出现的次数。为此,我制作了一个包含唯一值的集合(所以我知道向量中要计算哪些数字/多少个数字),但我无法将它们放在一起。

我知道我可以使用迭代器对向量进行计数,但我不知道怎么说,“嘿,检查集合中位置一的数字。”我查看了资源,但他们只使用 find,我假设我不知道 vector<int> 中的数字是什么,或者索引是数字变化的位置(如果有的话)。

我想我可以遍历集合,但这样做会给我所有数字的计数,我将它们存储在另一个向量中。我的意思是,我想我可以将计数向量分成两半,但这是一种偷工减料,我宁愿第一次正确编码,也不愿想出技巧来获得我想要的结果,因为我在之前编写的方法中使用了后者,但它只在某些时候有效。

【问题讨论】:

  • 我将使用数字的 std::map 来代替集合,并在迭代向量时继续构建它。
  • 你为什么首先使用矢量?你需要保持插入顺序吗?如果插入的顺序不重要,请使用 map 为每个数字保存一个计数器,计数器将是值(您将增加而不是插入向量),数字将是键.
  • @idanuda 我真的不需要,但这是我想到存储所有因素的第一种方式。

标签: c++ vector count iterator set


【解决方案1】:

因此,如果是这种情况,您不需要 Set 进行计数,只需遍历地图即可 -

void SomeClass::Insert (int newNumber)
{
    if (m_map.count (newNumber) > 0)
    {
        m_map[newNumber]++;
    }
    else 
    {
        m_map[newNumber] = 1;
    }
}

void SomeClass::Count ()
{
    for (map<int,int>::iterator it=m_map.begin(); it!=m_map.end(); ++it)
    {
        std::cout << "the number: "<< it->first << " apears " << it->second << "times" <<'\n';
    }
}

【讨论】:

  • 你能解释一下 it->first 和 it->second 的作用吗?因为我需要将这些数字用于其他目的,并且我想知道到底发生了什么(在今天之前我从未使用过地图或迭代器)。
  • it 持有一对值,key和key的值在map中。 it-&gt;first 是键,it-&gt;second 是键的值。在您的情况下,地图的值将保存每个数字的计数器,键将是数字,每个 pair 一个键和值将保存一个数字及其计数器。查看此以了解 c++ 映射的用法 - [链接] (cplusplus.com/reference/map/map)
猜你喜欢
  • 2012-12-27
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2021-10-17
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多