I am trying to find out a way to change the value of a custom structure using structured binding .I was able to do with std::map
.I referred few materials from
Structured binding
In the below code I was able to change the value of a map . I want to change the value of unsigned salary
from defaulted 1000 to 10000
#include<iostream>
#include<string>
#include<vector>
#include<map>
struct employee {
unsigned id;
int roll;
std::string name;
std::string role;
unsigned salary=1000;
};
int main()
{
std::map<std::string, int> animal_population {
{"humans", 10},
{"chickens", 11},
{"camels", 12},
{"sheep", 13},
};
std::cout<<"Before the change"<<'\n';
for (const auto &[species, count] : animal_population)
{
std::cout << "There are " << count << " " << species
<< " on this planet.\n";
}
for (const auto &[species, count] : animal_population)
{
if (species=="humans")
{
animal_population[species]=2000;
}
}
std::cout<<"After the change"<<'\n';
for (const auto &[species, count] : animal_population)
{
std::cout << "There are " << count << " " << species
<< " on this planet.\n";
}
std::vector<employee> employees(4);
employees[0].id = 1;
employees[0].name = "hari";
employees[1].id = 2;
employees[1].name = "om";
for (const auto &[id,roll,name,role,salary] : employees) {
std::cout << "Name: " << name<<'\n'
<< "Role: " << role<<'\n'
<< "Salary: " << salary << '\n';
}
}
Output
Before the change
There are 12 camels on this planet.
There are 11 chickens on this planet.
There are 10 humans on this planet.
There are 13 sheep on this planet.
After the change
There are 12 camels on this planet.
There are 11 chickens on this planet.
There are 2000 humans on this planet.
There are 13 sheep on this planet.
Name: hari
Role:
Salary: 1000
Name: om
Role:
Salary: 1000
Name:
Role:
Salary: 1000
Name:
Role:
Salary: 1000
Change I tried to get expected output
Error I got
Cannot assign to variable 'salary' with const-qualified type 'const int'
for (const auto &[id,roll,name,role,salary] : employees) {
//employees[].salary = 10000; //not working
// salary = 10000; //not working
std::cout << "Name: " << name<<'\n'
<< "Role: " << role<<'\n'
<< "Salary: " << salary << '\n';
}
Expected Output
Before the change
There are 12 camels on this planet.
There are 11 chickens on this planet.
There are 10 humans on this planet.
There are 13 sheep on this planet.
After the change
There are 12 camels on this planet.
There are 11 chickens on this planet.
There are 2000 humans on this planet.
There are 13 sheep on this planet.
Name: hari
Role:
Salary: 10000
Name: om
Role:
Salary: 10000
Name:
Role:
Salary: 10000
Name:
Role:
Salary: 10000
Thanks in Advance for any solution and suggestion
Problem is that your values have const
cvalifier. They are unmodificable.
Remove const
and use reference &
so you can modify these variables.
for (auto &[id,roll,name,role,salary] : employees) {
salary = 10000;
std::cout << "Name: " << name<<'\n'
<< "Role: " << role<<'\n'
<< "Salary: " << salary << '\n';
}