【问题标题】:How to enter a single value in a vector of pair?如何在一对向量中输入单个值?
【发布时间】:2019-07-09 18:34:52
【问题描述】:

我正在尝试使用 C++ 进行一个项目,并尝试将整数类型向量中的值输入到对类型向量中。

我尝试过emplace_backpush_back,但它不起作用。很可能是由于pair类型的向量。

注意:我正在使用 boost 库,不确定是否有帮助。

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

【问题讨论】:

  • 错误提示:您无法将vector&lt;unsigned&gt; 转换为vector&lt;pair&lt;unsigned, string&gt;&gt;
  • 你没有。一对总是包含两个值。
  • 是的,但是他们无论如何都可以做到这一点吗?
  • 不清楚您要做什么。您的参数中似乎有两个 vector&lt;unsigned int&gt;s。你想让parameters[1]的元素组成objectParams中对应元素的第一部分吗?

标签: c++ c++11 data-structures stdvector std-pair


【解决方案1】:

您试图将std::vector&lt;unsigned int&gt; 分配给std::pair&lt;unsigned int, std::string&gt;,这显然是不可能的。

你可以

  • std::pair&lt;unsigned int, std::string&gt;的向量分配给 objectParams
  • 或使用一对向量的元素进行列表初始化 parameters 的无符号整数向量(即unsigned int) 和std::string

你可能是这个意思:

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

【讨论】:

  • 感谢您的建议。我想在 parameters 的索引 1 处添加值,所以代码看起来像 vector&lt;objectops&gt; objectParams ={ { parameters.at(1).at(0), "string"} };
  • 如果您指的是 vector of vectors 中的第一个元素(即 (0,0) 处的元素):NOparameters.at(1) 表示parameters 的第二行;即parameters.at(1).at(0) -> (1,0) 处的元素。顺便说一句,您的 parameters 完全为空。
  • 是的,我的意思是parameters.at(1) 我有几行代码可以将值返回给parameters
  • @SubhomoyMukherjee 在这种情况下,是的。通过执行vector&lt;objectops&gt; objectParams ={ { parameters.at(1).at(0), "string"} };objectParams 的第一个条目将使用unsiged intstd::stringstd::pair 初始化,其中unsigned intparameters[1][0] 处的元素(即第一个条目第二行)
猜你喜欢
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2016-01-23
  • 1970-01-01
  • 2015-08-11
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多