下面是我创建和打印map<int, vector<int>>
的代码:
//map<int, vector>
map<int, vector<int>> int_vector;
vector<int> vec;
vec.push_back(2);
vec.push_back(5);
vec.push_back(7);
int_vector.insert(make_pair(1, vec));
vec.clear();
if (!vec.empty())
{
cout << "error:";
return -1;
}
vec.push_back(1);
vec.push_back(3);
vec.push_back(6);
int_vector.insert(make_pair(2, vec));
//print the map
map<int, vector<int>>::iterator itr;
cout << "\n The map int_vector is: \n";
for (itr2 = int_vector.begin(); itr != int_vector.end(); ++itr)
{
cout << "\t " << itr->first << "\t" << itr->second << "\n";
}
cout << endl;
打印部分不工作,因为
error: C2678: binary '<<': no operator found which takes a left-hand operand of type
'std::basic_ostream<char,std::char_traits<char>>' (or there is no acceptable conversion)
3条答案
按热度按时间dgtucam11#
Map的值(
std::map<int, std::vector<int>>
)是int
* s的 * 向量,标准中没有为打印std::vector<int>
定义operator<<
。您需要迭代向量(即Map的值)以打印元素。也就是说,如果你可以访问C11,你可以使用 * range-based for loops *,而在C17中,你可以更直观地为Map的 key-value 声明 * structured binding *:
备注:正如 @Jarod42 在备注中指出的,如果事先知道条目,则可以简化给定代码。
例如使用
std::map::emplace
ing:或者简单地使用X1 M6 N1 X的 * X1 E3 F1 X * 初始化Map。
vdzxcuhz2#
错误代码:C2678二进制“〈〈”:找不到操作员 *
也意味着你可以写你自己的运算符。这样做可以在你的对象变得更复杂时很方便。
k4aesqcs3#
打印Map〈int,向量〈'int'〉〉mp;