我有一个有一个私人成员的班级:
std::set<unsigned long> Sset;
我对此功能有疑问:
原型:
Set& Union (Set&, Set&);
代码:
Set& Set::Union (Set& s1, Set& s2)
{
set<unsigned long>::iterator a;
set<unsigned long>::iterator j;
for (a = s1.Sset.begin(); a!=s1.Sset.end(); ++a)
for (j = s2.Sset.begin(); j!=s2.Sset.end(); ++j)
if (*a = *j)
{
Sset.insert(*a);
break;
}
return *this;
}
我得到编译器错误表达式必须是*a=*j
使用迭代器j一切正常,但它不接受*a
任何帮助或解释? 感谢
答案 0 :(得分:4)
你应该在if语句中使用==
吗?
答案 1 :(得分:3)
经典错误:-) - 比较需要两个等号
if (*a == *j)
答案 2 :(得分:3)
if (*a = *j)
是作业
if (*a == *j)
答案 3 :(得分:3)
您可以一次性将一组插入另一组:
std::set<int> s1, s2;
s1.insert(s2.begin(), s2.end());
集合成员是唯一的,所以没有什么可担心的。
答案 4 :(得分:2)
您无法指定set::iterator
指向的值。
为什么?
因为集合保持其元素的顺序(set
,特别是排序)以便快速检索,所以你可以' t手动告诉它放置元素的位置。
相反,insert
元素位于正确的位置。
话虽如此 - 您的意思是使用==
代替=
吗?
答案 5 :(得分:0)
#include <algorithm> ... std::set_union(s1.begin(), s1.end(), s2.begin(), s2.end() ... )