计算map c ++中整数的出现次数

时间:2015-12-15 14:56:58

标签: c++

我正在尝试查看是否有任何重复的整数,因为我使用map插入它们,因为它会在插入数字时自动对它们进行排序。

例如,当我按以下顺序插入整数时:2 3 2 4 5 我想要一个输出:至少有一个数字是重复的,“我尝试了很多东西,但没有成功,有什么想法吗?

我面临的问题是:你有一个类型整数数组,你必须找到是否有任何重复使用map。

4 个答案:

答案 0 :(得分:0)

使用map::find

int keyToInsert = 2;

std::map<int, int>::iterator it;
it = yourMap.find(key);
if(it != yourMap.end()){
    //alert user key exists
}
else {
    //key doesn't exist
}

请参阅文档:http://www.cplusplus.com/reference/map/map/find/

答案 1 :(得分:0)

你接近问题的方式似乎从根本上说是错误的。 std :: map是用于“映射”容器中的逻辑实体的数据结构。

例如,它可用于将姓名映射到电话号码。像这样:

{(“Tom”,2344556),(“Amanda”,545654),...}

这将是std::map<std::string,int>的一个例子。

地图不用于将单独的int值保持在一起。如果你想要这个功能,你应该看看其他容器。

如果你想使用一个按顺序保存值(并保持重复)的容器,你可以使用std :: list或std :: vector,如果你想要一个数据结构,其中订单不能保证但访问速度快且重复通常避免使用std :: set

答案 2 :(得分:0)

我认为你想要(未经测试的代码):

bool check_for_duplicate(const std::map<my_key_type, int>& my_map)
{
  std::set<int> my_set;
  for (auto& i : my_map)
  {
    if (!my_set.insert(i.second).second)  // If it failed to insert
      return true;
  }
  return false;
}

答案 3 :(得分:0)

想法是把“整数”作为关键,“重复次数”作为地图的价值。通过这样做,你不仅可以弄清楚它是否重复了一个数字,你还可以弄清楚“有多少”时间实际上是重复的。“我在下面的代码片段中分享。

#include <iostream>
#include <map>
using namespace std;
int main ()
{
  int arr[10] = {1,2,3,4,1,2,2,1,4,5};
  std::map<int,int> dup_map;
  for(int  i=0;i<=9;i++)
  {
        if(dup_map.find(arr[i])!=dup_map.end())
        {
            //key exist and hence update the dulpicate count;
            dup_map[arr[i]]++;
        }
        else{
        //it doesn't exist in map
        dup_map.insert(std::pair<int,int>(arr[i],1));//single count of current number

        }

  }
  for(std::map<int,int>::iterator it =dup_map.begin();it!=dup_map.end();it++)
  {

      cout<<"\n Number "<<it->first<<" is repeated "<<it->second<<" times ";
  }
}

该计划的输出如下:

Number 1 is repeated 3 times 
 Number 2 is repeated 3 times 
 Number 3 is repeated 1 times 
 Number 4 is repeated 2 times 
 Number 5 is repeated 1 times