C++ std::transform vector of pairs->first to new vector

标签 c++ vector transform functor std-pair

抱歉,有点初学者问题。有 vector 和 vector 对

typedef std::vector <int> TItems;
typedef std::vector < std::pair <int, int> > TPairs;

有什么方法可以一步将所有第一项成对转换为另一个 vector

int main ()
{
TItems items;
TPairs pairs;

pairs.push_back (std::make_pair(1,3));
pairs.push_back (std::make_pair(5,7));

std::transform( items.begin(), items.end(), items.begin(), comp ( &pairs ) );

return 0;
}

如何设计仿函数?

class comp
{
private:
     TPairs *pairs;

public:
    comp ( TPairs  *pairs_ ) : pairs ( pairs_) { }

    unsigned int operator () ( const unsigned int index ) const
    {
        return  (*pairs)[index].second != pairs->end();  //Bad idea
    }
};

也许有一些更用户友好的方法,没有 lambda 表达式和循环。感谢您的帮助。

最佳答案

首先,您应该使用 back_inserter作为 transform 的第三个参数以便将转换后的值推到 vector 的后面。

其次,您需要某种仿函数,它接受一对整数并返回第一个整数。应该这样做:

int firstElement( const std::pair<int, int> &p ) {
    return p.first;
}

现在,把各个部分放在一起:

TPairs pairs;
pairs.push_back( std::make_pair( 1, 3 ) );
pairs.push_back( std::make_pair( 5, 7 ) );

TItems items;
std::transform( pairs.begin(), pairs.end(), std::back_inserter( items ),
                firstElement );

在此代码之后,items 包含 1 和 5。

关于C++ std::transform vector of pairs->first to new vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094132/

相关文章:

c++ - 多态性,构造函数中使用的重写方法 - C++

c++ - 实现一个类想要模拟 std::string 但在将其 push_back 到 vector 时卡住

CSS:绝对(?)定位倾斜元素(无JS!重要)

r - 从 dplyr 管道中的当前观察中减去特定数字

c++ - 在 C++ 中使用 alsa 的 dmix 插件进行音频混合

c++ - 进入函数时堆栈溢出

c++ - 如何在 Linux 中拍摄快照 - 以编程方式 C++

c - 带 vector 的结构指针 - 段错误

c++ - std::vector::erase() 是否真的在删除点使迭代器无效?

html - 使用 transform(-50%,-50%) 使部分居中时文本变得模糊