免责声明:我尝试在网上搜索,特别是在这里。如果已经回答了这个问题,请重定向我并关闭此问题。
我遇到了编码问题,我正在尝试使用以下代码解决它:
#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
成员。
问题是:这是可能的,如果是这样的话我该怎么做?
答案 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.
}