如何连接shared_ptr的多个向量?
How to concatinate multiple vectors of shared_ptr's?
我看过其他帖子,但我正在尝试使用一些<algorithm>
方法。我有一个指向映射的指针,其中包含指向BaseElement类的指针向量的键,如下所示。
using ElementV = std::vector<std::shared_ptr<BaseElement>>;
using ElementM = std::map<int, ElementV>;
using SElementM = std::shared_ptr<ElementM>;
SElementM elements;
我试图做的是将存储为映射(ElementM(中的值的每个向量(ElementV(连接起来,并填充一个大的ElementV。我不想做深度复制,只想通过allElems向量中的智能指针(shared_ptr(BaseElement((访问原始元素。
以下是错误的,但给出了我要做的事情的想法。
ElementV allElems;
for (auto& index : indices) {
allElems = elements->at(index);
}
我怀疑我应该将lambas与std::copy一起使用,但一直无法获得类似于以下内容的功能,我认为这是因为迭代器。
std::copy(allElems.begin(), allElems.end(), [const elements &elems](std::vector<shared_ptr<BaseElement> &val) {
elems ...?
}
想法?
您可以通过std::map
的迭代获得成对的键(第一个(和值(第二个(,因此通过std::for_each
插入每个向量是一种方法。
ElementV allElems;
std::for_each(elements->begin(), elements->end(), [&allElems](const auto& p) {
allElems.insert(allElems.end(), p.second.begin(), p.second.end());
});
你可以试试这个:
ElementV allElems;
//assuming c++17 compiler
for(auto& [ind, elemVectorPtr]: *elements){ //iterate through index, element-vector pointer pair in elements map
//copy across all pointers in element-vector into allElems vector
std::copy(elemVectorPtr->begin(), elemVectorPtr->end(), std::back_inserter(allElems));
}
如果您没有c++17编译器,只需直接遍历映射中的成对项即可:
for(auto& pair : *elements){
std::copy(pair.second->begin(), pair.second->end(), std::back_inserter(allElems));
}
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 为共享 ptr 向量实现复制 c'tor?
- 对唯一 ptr 无效读取的引用向量
- 接口 PTR 的返回向量C++
- 如何在满足谓词的向量中获得唯一PTR的子集
- 通过成员函数将唯一 ptr 的向量附加到另一个向量
- C++ 提升克隆 PTR 向量
- PTR到结构体和PTR到结构体的向量的模板方法专门化