只读位置'__result.std :: _ Rb_tree_const_iterator <_Tp> :: operator * <long long int>()'的错误分配

0 c++

对的所有元素进行异或运算时出错std::set。下面是部分代码。不太了解std::transform。帮助请:)

    #include<bits/stdc++.h>
    #define ll long long int 

    using namespace std;

    int main()
    {
       set<ll> e1 ;//suppose i had inserted few elements in it!
       ll x2;
       cin>>x2;
       //now i want to xor all elements of set with x2.
       std::transform(std::begin(e1), std::end(e1), std::begin(e1), [=](ll x){return x2^x;});
       return 0;
     }
Run Code Online (Sandbox Code Playgroud)

错误信息:

只读位置'__result.std :: _ Rb_tree_const_iterator <_Tp> :: operator *()的错误分配

Seb*_*edl 6

你不能 A std::set不允许对其元素进行就地修改,因此永远不能写入其迭代器。因此,您不能将a std::set用作a 的目标std::transform

您必须根据旧元素创建新的集合,并随您的需要进行转换。(例如,通过使用a std::inserter作为目标std::transform。)

您确定不能只使用std::vector吗?