如果已知该结构的另一个成员,则在向量中修改结构的成员

时间:2014-10-24 03:51:15

标签: c++ vector struct

免责声明:我尝试在网上搜索,特别是在这里。如果已经回答了这个问题,请重定向我并关闭此问题。

我遇到了编码问题,我正在尝试使用以下代码解决它:

#include <fstream>
#include <map>
#include <string>
#include <vector>

using namespace std;

int main()
{
    ifstream fin("gifts1.in", ios::in);
    ofstream fout("gifts1.out", ios::out);

    unsigned short NP;

    struct person
    {
        string name;
        unsigned int gave;
        unsigned int received;
    };

    vector<person> accounts;

    string tmp_name;
    person buf_person;

    fin >> NP;
    accounts.resize(NP);
    for (auto i : accounts)
    {
        fin >> tmp_name;
        i.name = tmp_name;
        i.gave = i.received = 0;
    }

    for (auto j : accounts)
    {
        string name;
        fin >> name;

        unsigned int sum, people;
        fin >> sum >> people;
        j.gave = sum;
        if (people != 0)
        {

            for (int i = 1; i < people; i++)
            {
                string receiver_name;
                fin >> receiver_name;
                accounts.receiver_name.received = sum / people;   // no idea here
            }

            j.gave -= sum % people;   // if a person meant to give 200, but couldn't divide 3,
            // he actually gave 197
        }
    }

    fin.close();
    fout.close();

    exit(0);
}

内部for循环应该像这样工作:我给了string receiver_name,我在向量中搜索具有此名称的特定person结构name成员并更改其received成员。

问题是:这是可能的,如果是这样的话我该怎么做?

1 个答案:

答案 0 :(得分:3)

vector<person>::iterator it = std::find_if(accounts.begin(), accounts.end(),
  [&receiver_name](const person& p) { return p.name == receiver_name; });
if (it == accounts.end()) {
  // No person with this name
} else {
  person& found = *it;
  // Do what you need here.
}