如何解决如何合并shared_ptr的多个向量?
我看过其他文章,但是我正在尝试使用某些<algorithm>
方法来做到这一点。我有一个指向映射的指针,该映射包含一个指向如下所示的BaseElement类的指针向量的键。
using ElementV = std::vector<std::shared_ptr<BaseElement>>;
using ElementM = std::map<int,ElementV>;
using SElementM = std::shared_ptr<ElementM>;
SElementM elements;
我想做的是将每个向量(ElementV)连接为映射(ElementM)中的值存储,并填充一个大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));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。