unordered_set для установки преобразования с использованием оператора перегрузки = - PullRequest
0 голосов
/ 20 мая 2018

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

set<int> operator=(unordered_set<int> us)
{
    set<int> s;
    for(auto val:us) { s.insert(val); }
    return s;
}

Я получаю следующую ошибку:

error: ‘std::set<int> operator=(std::unordered_set<int>)’ must be a nonstatic member function
 set<int> operator=(unordered_set<int> us)

Эта функция является глобальной, не знаю, почему G ++ считает, что этостатическая функция.В качестве глупого решения я добавляю автоопределитель к функции.

set<int> auto operator=(unordered_set<int> us)
{
    set<int> s;
    for(auto val:us) { s.insert(val); }
    return s;
}

Я получаю следующую ошибку:

error: two or more data types in declaration of ‘operator=’
 set<int>  auto operator=(unordered_set<int> us)

Есть идеи, как мне обойти это?Я пытался найти решение для этого, но тщетно.

1 Ответ

0 голосов
/ 20 мая 2018

Ошибка здесь вполне понятна.Вы не можете иметь «глобальный» оператор присваивания по своему желанию.Это должно быть функцией-членом unordered_set, если вы хотите сделать это следующим образом.Объявите эту функцию как член класса unordered_set.

std::set<T> std::unordered_set<T>::operator=(std::unordered_set<T> us)
{
    set<T> s;
    for(auto val:us) { s.insert(val); }
    return s;
}

Несмотря на это, это, вероятно, не лучшее решение.Почему бы не создать глобальную функцию, которая преобразует unordered_set в set без оператора?

std::set<int> unorderedToOrdered(std::unordered_set<int> us)
{
    set<int> s;
    for(auto val:us) { s.insert(val); }
    return s;
}

Тогда вы можете просто вызвать ее так:

// some unordered set containing values
std::unordered_set<int> uos;

// some set we want to convert to
std::set<int> s;

s = unorderedToOrdered(uos);
...