使用结构绑定来更改自定义结构的值

时间:2017-08-21 06:55:41

标签: c++ c++17 structured-bindings

我试图找到一种方法来使用结构化绑定来更改自定义结构的值。我能够使用std::map。我引用了一些材料来自 Structured binding

在下面的代码中,我能够更改地图的值。我想将unsigned salary的值从默认的1000更改为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';
    }

}

输出

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

更改我试图获得预期的输出

我遇到错误

  

无法分配给变量&#39; salary&#39;使用const限定类型&#39; const   INT&#39;

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';
}

预期产出

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

预先感谢任何解决方案和建议

1 个答案:

答案 0 :(得分:2)

问题是您的值有const cvalifier。它们是不可改变的。

删除const并使用引用&,以便修改这些变量。

for (auto &[id,roll,name,role,salary] : employees) {
    salary = 10000;
    std::cout << "Name: " << name<<'\n'
    << "Role: " << role<<'\n'
    << "Salary: " << salary << '\n';
}