for(std::pair<std::string, std::map<std::string, int>>& index : names)
В std::map
ключ карты, первое значение в паре, является постоянным значением.
Это должно быть:
for(std::pair<const std::string, std::map<std::string, int>>& index : names)
incrementAndPrintIt()
Параметр также должен быть настроен на то же самое.
Легко использовать auto
, чтобы вообще избежать всей этой головной боли:
for(auto& index : names)
Но это не поможет incrementAndPrintIt()
параметр. Однако для этого не нужен ключ карты, поэтому вы можете просто передать ему index.second
и сэкономить много износа на клавиатуре:
#include <iostream>
#include <vector>
#include <map>
void incrementAndPrintIt(std::map<std::string, int> &value)
{
for(auto& j : value) {
j.second = j.second + 1;
std::cout << "j: " << j.second << std::endl;
}
}
int main() {
//initialize a map of maps
std::map<std::string, std::map<std::string, int>> names = {{"women",{{"Rita",2}}},{"men",{{"Jack",4}}}};
for(auto& index : names) {
incrementAndPrintIt(index.second);
}
return 0;
}
Вы должны признать: это намного проще, не так ли?