Как сделать sh элементов карты для деке в C ++ - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь ниже python код в C ++. Так что я могу создать оболочку для этого python кода, чтобы ускорить выполнение кода (оригинальный код другой. Сейчас я пытаюсь использовать небольшой фрагмент кода, который включает deque и словарь).

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: error : нет соответствующей функции для вызова 'std :: deque :: push_back (std :: map &)' mydeque.push_back (my_map); ^ В файле, включенном в / usr / include / c ++ / 5 / deque: 64: 0, из программы. cpp: 1: /usr/include/c++/5/bits/stl_deque.h:1516:7: note: кандидат: void std :: deque <_Tp, _Allo c> :: push_back (const value_type &) [with _Tp = int; _Allo c = std :: allocator; std :: deque <_Tp, _Allo c> :: 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: примечание: кандидат: void std :: deque <_Tp, _Allo c> :: push_back (std :: deque <_Tp, _Allo c> :: value_type &&) [with _Tp = int; _Allo c = std :: allocator; std :: deque <_Tp, _Allo c> :: 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 &&}'

Ответы [ 2 ]

3 голосов
/ 07 января 2020

python не заботится о фактическом типе элементов в deque, поскольку он просто хранит ссылки.

В C ++ тип элемента, хранящегося в deque, должен совпадать. В деке хранятся не ссылки, а реальный объект (если только вы не создаете деку указателя на объект, что здесь не так). В качестве параметра шаблона укажите правильный тип:

std::deque<std::map<char, int>> mydeque;
mydeque.push_back(my_map); 
1 голос
/ 08 января 2020

Ваш тип содержимого контейнера всегда должен быть тем типом, который вы хотите вставить в него. Если вы этого не сделаете, вы получите ошибку.

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