2015-12-15 4 views
-5

Я пытаюсь увидеть, есть ли какие-либо дубликаты целых чисел, поскольку я вставляю их с помощью карты, потому что он автоматически сортирует их при вводе чисел.Подсчет Запутывания целых чисел в карте C++

Например, когда я вставляю целые числа в следующем порядке: 2 3 2 4 5 Я хочу, чтобы результат вроде: по крайней мере, число дублируется: «Я пробовал много вещей, но не имел успеха, никаких идей?

Проблемы, с которыми я столкнулся, таковы: у вас есть массив целых чисел, и вам нужно найти, есть ли дубликаты с использованием карты.

+0

Пожалуйста, попытайтесь объяснить вашу проблему в лучшую сторону (и с лучшим форматированием), и вы, безусловно, получить некоторые довольно ответ. –

+2

В соответствии с документами для std :: map вы можете использовать 'find', чтобы проверить, что-то на карте или нет. Вероятно, вы должны прочитать документы для std :: map по адресу http://en.cppreference.com/w/cpp/container/map. Вы также можете использовать 'count', чтобы определить, сколько раз появляется что-то. – gecko

+0

Очень благодарен, этот сайт потрясающий :)! – JohnnyOnPc

ответ

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/

+0

Это ищет существующие ключи. Я понимаю, что они хотят найти, является ли какой-либо из отображенных значений дубликатами, а не существует ли ключ. – KarenRei

+0

Лучший ответ спасибо! – JohnnyOnPc

0

, как вы приближаетесь к проблеме, кажется, в корне неправильно. std :: map - это структура данных, используемая для «отображения» логических объектов в контейнере.

например, его можно использовать для сопоставления имен с телефонными номерами. как это:

{("Томь", 2344556), ("Аманда", 545654), ...}

, что будет примером std::map<std::string,int>.

карта НЕ используется для хранения отдельных значений int вместе. если вы хотите эту функциональность, вы должны смотреть в другие контейнеры.

Если вы хотите использовать контейнер, который сохраняет значения в порядке (и сохраняет дубликаты), вы можете использовать std :: list или std :: vector, если вы хотите, чтобы структура данных, где заказ не гарантирован, но быстрый доступ и дубликаты, как правило, избегали, вы можете использовать станд :: установить

+0

Я бы использовал это, но есть проблема, мне нужно, чтобы мой контейнер был автоматически отсортирован, когда вставлены числа, могу ли я использовать мультимножество для этого? – JohnnyOnPc

+0

посмотреть в #include http://www.cplusplus.com/reference/algorithm/sort/ – ForeverStudent

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; 
} 
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 
Смежные вопросы