c++ - 多集上的 std::transform 给我错误 C3892

标签 c++ stl multiset

我试图了解 std::transform 函数的工作原理,但我在使用以下代码时遇到了一些麻烦。我想取一个 multiset ms,将每个元素的内容加 1 并将它们存储在一个新的 multiset msc 中。这是我所拥有的:

int op_increase(int i) { return ++i; }

int main()
{

std::multiset<int> ms = {1,1,2,2,3};
std::multiset<int> msc;
std::transform(ms.begin(), ms.end(), msc.begin(), op_increase);

return 0;
}

但是我得到以下错误:

C3892:_Dest:您不能分配给常量变量

最佳答案

您的代码没有使用允许插入空容器的 std::transform 的正确参数。这需要使用足够智能的迭代器来调用调用容器的 insert() 函数的适当函数。

解决方案是提供 std::transform std::inserter 迭代器,它会自动插入到空的 multiset 中。这是一个例子:

#include <set>
#include <algorithm>
#include <iterator>

int op_increase(int i) { return ++i; }

int main()
{
    std::multiset<int> ms = {1,1,2,2,3};
    std::multiset<int> msc;
    std::transform(ms.begin(), ms.end(), std::inserter(msc, msc.begin()), op_increase);
    // msc now contains 2,2,3,3,4  
}

请注意使用了 std::inserter,而不仅仅是 msc.begin()。插入器会自动将项目插入到 map 中。

Live Example

关于c++ - 多集上的 std::transform 给我错误 C3892,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38681406/

相关文章:

带有 unique_ptr 的 C++ 嵌套映射

c++ - 多集删除最后一个元素

c++ - 升级到VS2010 : Random Unresolved Symbol

c++ - DLL 导出导致唯一指针问题

c++ - Visual Build (kinook) 如何构建 C++ 项目?

c++ - 数组或图像中的唯一值数字

c++ - 如何打印出对的多集元素

c++ - std::advance 在 std::multiset 的迭代器上是否在恒定时间内完成?

c++ - 使用类属性调用具有非类型模板参数的模板函数

python - python 中的 a,b = b,a 与 C++ 中的 std::swap()