C++:使用 lambda 将 STL 容器复制到 STL 容器

问题描述 投票:0回答:1

我找不到任何关于这个具体案例的信息,想知道这是否可能。

我想从 unordered_set 的元素(元组)中创建一个新的向量向量。为此,我在构造函数中使用了 lambda 函数。

struct hashFunction {
  size_t operator()(const tuple<int, int, int>& x) const {
      return get<0>(x) ^ get<1>(x) ^ get<2>(x); // Could be something else
  }
};

int main() {
    unordered_set<tuple<int, int, int>, hashFunction> mySet = {{1, 2, 3},
                                                               {4, 5, 6},
                                                               {7, 8, 9}};

    vector<vector<int>> myVector(mySet.begin(), mySet.end(), [](const tuple<int, int, int>& curTuple) {
      return vector<int>{get<0>(curTuple), get<1>(curTuple), get<2>(curTuple)};
    });

    return 0;
}

但我明白:

no matching constructor for initialization of 'vector<vector<int>>'
c++ lambda constructor iterator c++17
1个回答
0
投票

不,

std::vector
没有这样的构造函数。您可以使用
std::transform
代替:

std::vector<std::vector<int>> myVector;

std::transform(mySet.begin(), mySet.end(), std::back_inserter(myVector),
                [](const std::tuple<int, int, int>& curTuple) {
                    return vector<int>{std::get<0>(curTuple),
                                        std::get<1>(curTuple),
                                        std::get<2>(curTuple)};
                });
© www.soinside.com 2019 - 2024. All rights reserved.