создание unordered_set для поиска пар целых чисел в векторе - PullRequest
0 голосов
/ 02 июля 2019

Для поиска пар в векторе я использую unordered_set. Мне нужна помощь в том, почему создание не работает.

Я работаю над кодом, пытающимся найти пары в векторе. Мне нужно unordered_set для логики.

Вот мой код:

int sockMerchant(int n, vector<int> ar) {
    set<int> colors = new unordered_set<int>();

    int pairs;

    for ( int i = 0 ; i < n ; i++ ) {
        if(!colors.contains(ar[i])) {
            colors.insert(ar[i]);
        } else {
            pairs++; 
            colors.erase(ar[i]);
        }
    }
    return pairs;
}

Сообщение об ошибке:

Solution.cpp: In function 'int sockMerchant(int, std::vector<int>)':
Solution.cpp:10:23: error: conversion from 'std::unordered_set<int>*' to non-scalar type 'std::set<int>' requested
     set<int> colors = new unordered_set<int>();
                       ^~~~~~~~~~~~~~~~~~~~~~~~
Solution.cpp:15:20: error: 'class std::set<int>' has no member named 'contains'
         if(!colors.contains(ar[i])) {
                    ^~~~~~~~

Статус выхода

1

I, за исключением unordered_set, который будет создан и содержит для использования.

1 Ответ

2 голосов
/ 02 июля 2019

Здесь много проблем (и компилятор достаточно хорош, чтобы быть по-настоящему информативным)

  1. Вы пытаетесь присвоить std::unordered_set<int>* в std::set<int>переменная.Типы не совпадают, один - указатель (возвращается из new()), а другой - локальная переменная стека.Фактические классы не соответствуют ни unordered_set != set

  2. std::set, ни std::unordered_set не имеют функции-члена с именем contains (по крайней мере, не в текущем стандарте C ++,будет доступен в C ++ 20).Вы можете просто использовать функцию-член find из std::unordered_set, чтобы увидеть, есть ли уже элемент в наборе.

Вы можете посмотреть определение класса вздесь: https://en.cppreference.com/w/cpp/container/unordered_set

В другом примечании, если нет необходимости использовать new, не используйте его.Функция не возвращает созданный вами набор.Если вы настаиваете на использовании new, вам следует использовать delete после того, как вы закончите использование набора, если вы этого не сделаете, у вас будут утечки памяти.

...