我正在尝试查看是否有任何重复的整数,因为我使用map插入它们,因为它会在插入数字时自动对它们进行排序。
例如,当我按以下顺序插入整数时:2 3 2 4 5 我想要一个输出:至少有一个数字是重复的,“我尝试了很多东西,但没有成功,有什么想法吗?
我面临的问题是:你有一个类型整数数组,你必须找到是否有任何重复使用map。
答案 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
}
答案 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