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

Error assignment of read-only location '__result.std::_Rb_tree_const_iterator<_Tp>::operator*<long long int>()'

本文关键字:gt lt long operator 错误 分配 int const std result 位置      更新时间:2023-10-16

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;
     }

错误信息:

只读位置分配错误 '__result.std::_Rb_tree_const_iterator<_Tp>::operator*(('

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

你必须从旧元素创建一个新集合,边走边变。(例如,通过使用std::inserter作为std::transform的目标。

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