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

Posted

技术标签:

【中文标题】如果该结构的另一个成员已知,则在向量中修改该结构的成员【英文标题】:Modifying a member of a struct in a vector if another member of that struct is known 【发布时间】:2014-10-24 03:51:14 【问题描述】:

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

我有一个编码问题,我正在尝试使用以下代码解决它:

#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】:
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.

【讨论】:

它看起来既优雅又神秘。另外,请澄清一下:这是一个 lambda 吗? 澄清一下:这段代码确实使用了 lambda。 太棒了。谢谢。我可能需要更多地了解他们。对于可能会找到这段代码的后代:std::find_if&lt;algorithm&gt;

以上是关于如果该结构的另一个成员已知,则在向量中修改该结构的成员的主要内容,如果未能解决你的问题,请参考以下文章

函数可以返回结构体的原因

SystemVerilog:从结构向量中,获取一个向量,该向量收集每个结构的一个字段

跨越结构向量的成员

std::find 条件语句未按预期工作

如何将数据存储在动态二维数组中,该数组在 C++ 中的另一个结构中也使用的结构中声明

如何使用 OpenCV 将向量的结构复制到 C++ 中的另一个向量