Прежде всего, мне любопытно знать, что ваша программа должна делать, для чего требуется карта, которая отображает вектор целых чисел и вектор символов. На карте хранятся пары векторов int и векторов char, например:
3 8 5 7 => c j i e
5 7 2 0 => l o x w
1 4 3 8 => k r u a
Возможно, вам нужен std::map<int, char>
, который отображает int на символ типа:
5 => m
2 => c
0 => a
Если вы хотите распечатать содержимое std::map<std::vector<int>, std::vector<char>>
, вам нужно перебрать пары ключ-значение, как вы уже делаете, а затем распечатать вектор ключа и вектор значения отдельно с помощью циклов.
Пример:
#include <iostream>
#include <map>
#include <vector>
int main()
{
std::map<std::vector<int>, std::vector<char>> boardMap; //declare and insert some values for testing
boardMap.insert(std::make_pair(std::vector<int>({ 8, 6, 2, 7 }), std::vector<char>({ 'o', 'd', 'a' })));
boardMap.insert(std::make_pair(std::vector<int>({ 4, 1, 0, 4 }), std::vector<char>({ 's', 'd', 'l' })));
for (auto it = boardMap.begin(); it != boardMap.end(); ++it)
{ //using auto is much better than writing std::map<std::vector<int>, std::vector<char>>::iterator every time
for (auto vecIt = it->first.begin(); vecIt != it->first.end(); ++vecIt) //output key vector
{
std::cout << *vecIt << ' ';
}
std::cout << "=>";
for (auto vecIt = it->second.begin(); vecIt != it->second.end(); ++vecIt) //output value vector
{
std::cout << ' ' << *vecIt;
}
std::cout << '\n';
}
return 0;
}
Более элегантная версия с диапазонами для петель:
#include <iostream>
#include <map>
#include <vector>
int main()
{
std::map<std::vector<int>, std::vector<char>> boardMap; //declare and insert some values for testing
boardMap.insert(std::make_pair(std::vector<int>({ 8, 6, 2, 7 }), std::vector<char>({ 'o', 'd', 'a' })));
boardMap.insert(std::make_pair(std::vector<int>({ 4, 1, 0, 4 }), std::vector<char>({ 's', 'd', 'l' })));
for (auto &keyValuePair : boardMap)
{ //using auto is much better than writing std::map<std::vector<int>, std::vector<char>>::iterator every time
for (auto &keyNum : keyValuePair.first) //output key vector
{
std::cout << keyNum << ' ';
}
std::cout << "=>";
for (auto &valueNum : keyValuePair.second) //output value vector
{
std::cout << ' ' << valueNum;
}
std::cout << '\n';
}
return 0;
}
Хотя лучшим способом было бы использовать функции из заголовка <algorithm>
, такие как std::for_each
и лямбда-выражения, для выполнения всех циклов за вас. Я не очень хорош в этом деле.
Для операции поиска у вас есть карта с std::vector<int>
в качестве ключа, но вы даете один int для функции std::map::find
. Если вы действительно хотите иметь карту с векторами в качестве ключей, вам нужно задать вектор функции:
auto findResult = boardMap.find(std::vector<int>({8, 5, 2, 6}));
Это создает вектор, содержащий четыре числа и дает его std::map::find
.