无法创建带有布尔值和矢量的地图

Not able to create map with bool and vector

本文关键字:地图 布尔值 创建      更新时间:2023-10-16

我正在尝试用布尔值和向量制作一个地图,但这似乎不对,我有类似的构造函数正在工作,我只是替换了类型。

以下是错误:

error: could not convert 'result.std::map< bool, std::vector<  unsigned int> >::emplace< std::pair< bool, std::vector< unsigned int, std::allocator< unsigned int> > > >(std::make_pair(_T1&&, _T2&&) [with _T1 = bool; _T2 = std::vector< unsigned int>; typename std::__decay_and_strip<_T2>::__type = std::vector< unsigned int>; typename std::__decay_and_strip<_Tp>::__type = bool](make_vec_pair(unsigned int, unsigned int)(nums.std::vector< unsigned int>::at((nums.std::vector< unsigned int>::size() - 1)))))' from 'std::pair< std::_Rb_tree_iterator<std::pair< const bool, std::vector< unsigned int> > >, bool>' to 'std::map<bool, std::vector< unsigned int> >'

法典:

std::vector<unsigned int> make_vec_pair(unsigned int num1, unsigned int num2)
{
std::vector<unsigned int> temp_vec;
temp_vec.push_back(num1);
temp_vec.push_back(num2);
return temp_vec;
}
std::map<bool,std::vector<unsigned int>> make_map_of_result(std::vector<unsigned int> nums, unsigned int sum)
{
std::map<bool,std::vector<unsigned int>> result; 
std::vector<unsigned int> nums_pair;
/* process */
return result.emplace(std::make_pair(true,make_vec_pair(nums.at(i) , nums.at(i+1))));
}
#include <iostream>
#include <vector>
#include <bits/stdc++.h> 
#include <map>
int main()
{
std::map<bool, std::vector<unsigned int>> res_map;
std::vector<unsigned int> numbers {6,1,2,5,4,3};
std::sort(numbers.begin(),numbers.end())
res_map = two_num_sum_array(numbers,5);
for(auto &m:res_map)
std::cout<<m.first;
return 0;
}

另外,我正在使用下面的重载函数来打印矢量,有什么问题

for(auto &m:res_map)
std::cout<<m.first<<m.second; // m.second is vector is giving problem

std::ostream &operator << (std::ostream &out,const std::vector<unsigned int> &vec){
return std::out<<vec.at(0)<<vec.at(1);
}

更新:这有效

std::ostream &operator << (std::ostream &out,const std::vector<unsigned int> &vec){
return out<<vec.at(0)<<vec.at(1);
}

你不应该returnemplace的结果,那应该是两行。您还可以删除std::make_pair并删除make_vec_pair功能。

result.emplace(true, std::vector<unsigned int>({nums.at(i), nums.at(i+1)}));
return result;