10

In C++, if I have two vectors of int:

A = [1, 2, 3 ,4]; 
B = [1, 2, 3, 4]; 

How can I merge them into one vector of pairs:

[(1,1), (2,2), (3,3), (4, 4)]

Of course I can do that with a loop. But can we do that using suitable STL functions and iterators?

4

2 回答 2

20

您可以为此使用算法:

std::vector<std::pair<int, int>> target;
target.reserve(A.size());
std::transform(A.begin(), A.end(), B.begin(), std::back_inserter(target),
               [](int a, int b) { return std::make_pair(a, b); });
于 2013-08-28T02:23:49.543 回答
6

我同意 Dietmar Kühl 的回答完全符合问题中的要求,但我也同意 Kakadur 的评论。隐藏了一个循环,std::transform()因此复杂性是相同的。有些人会判断,但如果没有直接证据证明一种方法比另一种更好,我倾向于选择最易读和最不冗长的版本:

// create a vector of length of the smaller vector
std::vector<std::pair<int, int>> target( A.size() < B.size() ? A.size() : B.size() );

for (unsigned i = 0; i < target.size(); i++)
    target[i] = std::make_pair(A[i], B[i]);

PS 上面的代码为向量分配了足够的空间,这样就可以避免target潜在的开销(在重新分配的情况下)。push_back

于 2013-08-28T03:57:59.890 回答