unordered_set 使用重载运算符设置转换=

unordered_set to set conversion using overloading operator=

我正在尝试重载赋值运算符以允许将集合分配给 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)

有什么办法可以解决这个问题吗?我曾尝试为此寻找解决方案,但徒劳无功。

这里的错误很明显。您不能根据需要使用 "global" 赋值运算符。如果你想这样做,它必须是 unordered_set 的成员函数。将此函数声明为 class 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);