【问题标题】:How to push map elements to deque in c++如何在 C++ 中将地图元素推送到双端队列
【发布时间】:2020-04-24 23:19:20
【问题描述】:

我正在 c++ 中尝试下面的 python 代码。这样我就可以为我的这个 python 代码创建一个包装器来加速代码的执行(原始代码不同。现在我正在尝试包含双端队列和字典的一小段代码)。

Python:

from collections import deque
d=deque()
d.append({'a':1,'b':2})
d.append({'c':3,'d':4})
print(d)

输出: deque([{'a': 1, 'b': 2}, {'c': 3, 'd': 4}])

C++ 14:

#include <deque> 
#include <iostream> 
using namespace std; 

#include <map>

std::map<char, int> my_map = {
    { 'a', 1 },
    { 'b', 2 }   
};

int main() 
{ 
    deque<int> mydeque;
    mydeque.push_back(my_map); 
    return 0; 
} 

这给了我一个明显的错误。我不知道如何将字典元素放入双端队列?

prog.cpp:在函数“int main()”中:prog.cpp:16:29:错误:没有匹配 调用'std::deque::push_back(std::map&)'的函数 mydeque.push_back(my_map); ^ 在 /usr/include/c++/5/deque:64:0 包含的文件中, 从 prog.cpp:1: /usr/include/c++/5/bits/stl_deque.h:1516:7: 注意:候选:无效 std::deque<_tp _alloc>::push_back(const value_type&) [with _Tp = int; _Alloc = std::allocator; std::deque<_tp _alloc>::value_type = int] push_back(const value_type& __x) ^ /usr/include/c++/5/bits/stl_deque.h:1516:7:注意:没有已知的参数 1 从“std::map”到“const”的转换 value_type& {aka const int&}' /usr/include/c++/5/bits/stl_deque.h:1531:7:注意:候选:无效 std::deque<_tp _alloc>::push_back(std::deque<_tp _alloc>::value_type&&) [with _Tp = int; _Alloc = std::allocator; std::deque<_tp _alloc>::value_type = int] push_back(value_type&& __x) ^ /usr/include/c++/5/bits/stl_deque.h:1531:7: 注意:参数 1 从 'std::map' 到没有已知的转换 'std::deque::value_type&& {aka int&&}'

【问题讨论】:

  • 嗯,这是意料之中的,因为您已经声明了包含 int 项目的双端队列。
  • 您不能将类型映射推送到 int 的双端队列中。您可以选择地图的一个元素,
  • 尝试将双端队列声明为std::deque&lt;std::map&lt;char, int&gt;&gt;
  • 但是在 python 代码中,我有字典元素,其中包含存储在列表中的像素值、xpos、ypos 等信息。
  • 我正在尝试为返回字典列表(双端队列)的 python 代码函数之一创建包装器。然后我必须更改整个代码。

标签: python c++ c++14


【解决方案1】:

python 不太关心deque 中元素的实际类型,因为它只是存储引用。

在 C++ 中,双端队列持有的元素类型必须匹配。双端队列不是存储引用,而是实际的对象(除非您在对象上创建一个指针双端队列,这里不是这种情况)。将正确的类型作为模板参数:

std::deque<std::map<char, int>> mydeque;
mydeque.push_back(my_map); 

【讨论】:

    【解决方案2】:

    您的容器内容类型必须始终是您要插入其中的类型。除非你这样做,否则你会得到一个错误。

    std::deque<(type of your content)> mydeque;
    (type of your content) var1;
    mydeque.push_back(var1);
    

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2020-07-31
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 2020-07-06
      相关资源
      最近更新 更多