Как ввести одно значение в векторе пары? - PullRequest
2 голосов
/ 09 июля 2019

Я пробую проект на C ++ и пытаюсь ввести значение из вектора целочисленного типа в вектор парного типа.

Я пробовал emplace_back и push_back, но это не работает. Скорее всего, из-за парного вектора.

Примечание. Я использую библиотеки наддува, но не уверен, что это полезно.

typedef unsigned int objecttype;
typedef string operationtype;

typedef unsigned int checkob;

typedef pair<objecttype, operationtype> objectops;

vector<vector<unsigned int>> parameters;
//lines returning values to “parameters”
vector<checkob> checkParams = parameters.at(0);    // works fine
vector<objectops> objectParams = parameters.at(1); // below error

Сообщение об ошибке:

error test.cpp:273:30: error: no viable conversion from 'vector<unsigned int, allocator<unsigned int>>' to 'vector<model:: objectops, allocator<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >>>'
stl_vector.h:326:7: note: candidate constructor not viable: no known conversion from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<unsigned int, std::allocator<unsigned int> > > >::value_type' (aka 'std::vector<unsigned int, std::allocator<unsigned int> >') to 'const std::vector<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > &' for 1st argument
stl_vector.h:344:7: note: candidate constructor not viable: no known conversion from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<unsigned int, std::allocator<unsigned int> > > >::value_type' (aka 'std::vector<unsigned int, std::allocator<unsigned int> >') to 'std::vector<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > &&' for 1st argument
stl_vector.h:383:7: note: candidate constructor not viable: no known conversion from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<unsigned int, std::allocator<unsigned int> > > >::value_type' (aka 'std::vector<unsigned int, std::allocator<unsigned int> >') to 'initializer_list<std::vector<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::value_type>' (aka 'initializer_list<std::pair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >') for 1st argument

1 Ответ

1 голос
/ 09 июля 2019

Вы пытаетесь присвоить std::vector<unsigned int> для std::pair<unsigned int, std::string>, что, очевидно, невозможно.

Вы можете либо

  • назначить вектор std::pair<unsigned int, std::string> для objectParams
  • или инициализация списка с использованием пары элементов вектора вектора без знака int egers (то есть unsigned int) из parameters и std::string.

Вы, вероятно, имеете в виду это:

vector<objectops> objectParams ={ {  parameters.at(0).at(0), "string"} };
//                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    std::pair<objecttype, operationtype>
//                              ^^                                     ^^ for std::vector<objectops>
...