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