【问题标题】:Pushing a vector of pointers into a std::map将指针向量推入 std::map
【发布时间】:2020-03-10 06:29:26
【问题描述】:

我的一部分代码运行一个 for 循环,生成一个指向类的指针,并且每次 for 循环将生成的指针推送到指针类型的向量。

std::vector<class_X*>strvecptr;
std::map<int32,std::vector<class_X*>> MapStrPtr;
for(int32 key=0;key<5;key++)
{
for(int32 i=0;i<5;i++)
{
    class_X* ptr = new class_X* (i);

    \\ do some calculations

    strvecptr.push_back(ptr);

}
MapStrPtr[Key].push_back(strvecptr);

}

插入地图会引发错误

C2664: std::vector<_Ty>::push_back : cannot convert parameter 1 from std::vector<_Ty> to class_X* const &

我很困惑如何将其推送到地图中。

谢谢

【问题讨论】:

  • 你想要MapStrPtr[key] = myFilledVector;吗?
  • 是的,但是什么你想推到那里?如果你要一个一个地push_back每个元素,那是没有意义的,你可以将整个向量复制到地图中。
  • 是的。我想根据我的地图中的某些键值存储所有推送的指针向量
  • 我有点不明白你为什么发布伪代码。 for(int i=0;i&lt;10;++i) 并没有比 for(loop on i) 输入更多,但它是真实的代码。 new class_X* (arg depends on i);new class_X (i); 相同(另请注意 * !)。请阅读minimal reproducible example
  • 我很抱歉没有提供一个最小的可重现示例。我会在下一篇文章中更正它。感谢您的建议。

标签: c++ pointers stl maps


【解决方案1】:

我很困惑如何将其推送到地图中。

您不要push_back 将向量插入到地图中。对于给定的键,您可以一次性插入整个向量。

改变

MapStrPtr[key].pushback(strvecptr);

MapStrPtr[key] = strvecptr;


编辑以下 OP 评论:

如果我想推送相同键值的条目会怎样?

然后,您将获得密钥的现有存储向量,并将 push_back 指向 class_X 实例的指针。

MapStrPtr[key].pushback(ptr);

【讨论】:

  • 映射 mapped_type 是一个向量,因此假设 strvecptr 的类型为 class_x*MapStrPtr[key].pushback(strvecptr); 可能是正确的。不幸的是,这个问题还不清楚......
  • @foreknownas_463035818 strvecptr 不是 class_x* 根据现在的 OP 帖子。
  • @P0W 这就是问题不清楚的原因。我们不知道 OP 是想在 map 中保留一个向量的副本,还是将该向量的元素推送到 map 中的向量。
  • @P0W 仅在错误消息中,但这显然不是来自发布的代码。但是好吧,我明白你的意思了,只是现在我在错误消息中看到了它。尽管如此,“您不能/不能将_推回地图。”具有误导性,因为MapStrPtr[key].pushback(strvecptr); 并没有尝试进入地图。它正在尝试将 strvecptr 推送到映射内键 key 的映射值中。
  • @Yksisarvinen OP 想要什么,只有 OP 知道并能说出来,但不是他有 strvecptr 的声明。
【解决方案2】:

您的地图不包含矢量本身,但应该包含class_X*

改变这个:

std::map<int32_t, std::vector<class_X*>> MapStrPtr;

std::map<int32_t, class_X*> MapStrPtr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多