project1st <arg1,arg2 =“”>在STL中的用处是什么?</arg1,>

时间:2008-12-06 06:29:45

标签: c++ stl functional-programming

我正在浏览SGI STL文档并遇到project1st<Arg1, Arg2>。我理解它的定义,但我很难想象实际用法。

你曾经使用过project1st还是想象一个场景?

4 个答案:

答案 0 :(得分:3)

project1st的一个变体(采用std::pair并返回.first)非常有用。您可以将其与std::transform结合使用,将密钥从std::map<K,V>复制到std::vector<K>。同样,project2nd的变体可用于将地图中的值复制到vector<V>

实际上,没有一种标准算法真正受益于project1st。最接近的是partial_sum(project1st),它将所有输出元素设置为第一个输入元素。它的存在主要是因为STL在数学集理论中占有重要地位,而像project1st这样的运算是基本构件。

答案 1 :(得分:2)

我的猜测是,如果您使用策略模式并且遇到需要传递身份对象的情况,这将是一个不错的选择。例如,可能存在一种算法采用多个此类对象的情况,并且可能您希望其中一个在某些情况下不执行任何操作。

答案 2 :(得分:1)

并行编程。想象一下这样一种情况:两个进程为给定的计算提出了两个有效但不同的结果,并且您需要强制它们相同。 project1st / 2nd提供了一种非常方便的方法来对整个容器执行此操作,使用以functor为参数的适当并行调用。

答案 3 :(得分:0)

我认为某人对它有实际用处,或者它不会被写入,但我在它可能是什么上画了一个空白。据推测,它的用例类似于描述所提到的identity函数,其中不需要处理,但语法无论如何都需要一个仿函数。

同一页面上的示例建议将其与std::transform的双容器形式一起使用,但如果我没有弄错,他们使用它的方式在功能上与std::copy相同,所以我不明白这一点。

它似乎是向我寻找问题的解决方案。