How to compare a variable to member variables of objects contained in a vector











up vote
0
down vote

favorite












I have a vector std::vector<StudentGradeInfo> gradebook; objects of the class StudentGradeInfo. The StudentGradeInfo class contains the following member variables:
std::string studentName;
int studentID;
std::string major;



What I need to do is overload the == operator to compare the ID input from the user and compare it to the studentID member variables of the objects in the vector std::vector<StudentGradeInfo> gradebook;.



How would I go about looping through the vector to compare the ID's? It would probably be a non-member function since it is comparing an int variable to a member function of an object, but I do not know how to do this.










share|improve this question






















  • You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
    – Stephan Lechner
    Nov 10 at 22:27










  • @StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
    – throwthedays
    Nov 10 at 22:35















up vote
0
down vote

favorite












I have a vector std::vector<StudentGradeInfo> gradebook; objects of the class StudentGradeInfo. The StudentGradeInfo class contains the following member variables:
std::string studentName;
int studentID;
std::string major;



What I need to do is overload the == operator to compare the ID input from the user and compare it to the studentID member variables of the objects in the vector std::vector<StudentGradeInfo> gradebook;.



How would I go about looping through the vector to compare the ID's? It would probably be a non-member function since it is comparing an int variable to a member function of an object, but I do not know how to do this.










share|improve this question






















  • You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
    – Stephan Lechner
    Nov 10 at 22:27










  • @StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
    – throwthedays
    Nov 10 at 22:35













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a vector std::vector<StudentGradeInfo> gradebook; objects of the class StudentGradeInfo. The StudentGradeInfo class contains the following member variables:
std::string studentName;
int studentID;
std::string major;



What I need to do is overload the == operator to compare the ID input from the user and compare it to the studentID member variables of the objects in the vector std::vector<StudentGradeInfo> gradebook;.



How would I go about looping through the vector to compare the ID's? It would probably be a non-member function since it is comparing an int variable to a member function of an object, but I do not know how to do this.










share|improve this question













I have a vector std::vector<StudentGradeInfo> gradebook; objects of the class StudentGradeInfo. The StudentGradeInfo class contains the following member variables:
std::string studentName;
int studentID;
std::string major;



What I need to do is overload the == operator to compare the ID input from the user and compare it to the studentID member variables of the objects in the vector std::vector<StudentGradeInfo> gradebook;.



How would I go about looping through the vector to compare the ID's? It would probably be a non-member function since it is comparing an int variable to a member function of an object, but I do not know how to do this.







c++ operator-overloading






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 22:24









throwthedays

408




408












  • You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
    – Stephan Lechner
    Nov 10 at 22:27










  • @StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
    – throwthedays
    Nov 10 at 22:35


















  • You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
    – Stephan Lechner
    Nov 10 at 22:27










  • @StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
    – throwthedays
    Nov 10 at 22:35
















You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
– Stephan Lechner
Nov 10 at 22:27




You want to look up the StudentGradeInfo-object with a particular studentID within the vector, right?
– Stephan Lechner
Nov 10 at 22:27












@StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
– throwthedays
Nov 10 at 22:35




@StephanLechner yeah I think. I want to make sure that the user input ID is not the same as any studentIDs in the vector already
– throwthedays
Nov 10 at 22:35












2 Answers
2






active

oldest

votes

















up vote
1
down vote



accepted










I guess you could do it like this if you absolutely have to make an overloaded operator==.



bool operator==(const StudentGradeInfo& sgi, int id) {
return sgi.studentID == id;
}

std::vector<StudentGradeInfo> gradebook;
int id_to_find=1234;

for(auto& sgi : gradebook) {
if(sgi==id_to_find) {
//...
}
}





share|improve this answer




























    up vote
    0
    down vote













    I suppose you want to loop through the vector to find a studentGrandeInfo-object with a particular ID. You can accomplish this rather easy by using std::find_if together with a lambda-function for the proper comparison. The code could look as follows:



    int toFind = 4219; // some ID
    auto it = std::find_if(
    gradebook.begin(), gradebook.end(),
    [&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});


    In your case, as you the studentID seems to serve as a "unique key", I'd use data structure std::map<int, StrudentGradeInfo> instead.



    Overloading operator == is - as gsamars pointed out - somehow impractical, as it is meant for comparing two objects of the same type (and not an object with an int). See the following code illustrating this:



    struct StudentGradeInfo {
    std::string studentName;
    int studentID;

    bool operator==(const StudentGradeInfo& c) const {
    return c.studentID == studentID;
    }
    };

    int main() {

    std::vector<StudentGradeInfo> gradebook {
    { "john", 123 },
    { "max", 345 }
    };

    StudentGradeInfo aNewOne { "sepp", 345 };
    auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
    if (it == gradebook.end()) {
    cout << "345 does not exist" << endl;
    } else {
    cout << "345 already exists" << endl;
    }

    }





    share|improve this answer























    • Exactly what I thought! Wondering why the OP said he needs an operator overloading...
      – gsamaras
      Nov 10 at 22:36










    • I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
      – throwthedays
      Nov 10 at 22:38








    • 1




      That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
      – gsamaras
      Nov 10 at 22:40











    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244020%2fhow-to-compare-a-variable-to-member-variables-of-objects-contained-in-a-vector%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    I guess you could do it like this if you absolutely have to make an overloaded operator==.



    bool operator==(const StudentGradeInfo& sgi, int id) {
    return sgi.studentID == id;
    }

    std::vector<StudentGradeInfo> gradebook;
    int id_to_find=1234;

    for(auto& sgi : gradebook) {
    if(sgi==id_to_find) {
    //...
    }
    }





    share|improve this answer

























      up vote
      1
      down vote



      accepted










      I guess you could do it like this if you absolutely have to make an overloaded operator==.



      bool operator==(const StudentGradeInfo& sgi, int id) {
      return sgi.studentID == id;
      }

      std::vector<StudentGradeInfo> gradebook;
      int id_to_find=1234;

      for(auto& sgi : gradebook) {
      if(sgi==id_to_find) {
      //...
      }
      }





      share|improve this answer























        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        I guess you could do it like this if you absolutely have to make an overloaded operator==.



        bool operator==(const StudentGradeInfo& sgi, int id) {
        return sgi.studentID == id;
        }

        std::vector<StudentGradeInfo> gradebook;
        int id_to_find=1234;

        for(auto& sgi : gradebook) {
        if(sgi==id_to_find) {
        //...
        }
        }





        share|improve this answer












        I guess you could do it like this if you absolutely have to make an overloaded operator==.



        bool operator==(const StudentGradeInfo& sgi, int id) {
        return sgi.studentID == id;
        }

        std::vector<StudentGradeInfo> gradebook;
        int id_to_find=1234;

        for(auto& sgi : gradebook) {
        if(sgi==id_to_find) {
        //...
        }
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 10 at 22:47









        Ted Lyngmo

        1,206213




        1,206213
























            up vote
            0
            down vote













            I suppose you want to loop through the vector to find a studentGrandeInfo-object with a particular ID. You can accomplish this rather easy by using std::find_if together with a lambda-function for the proper comparison. The code could look as follows:



            int toFind = 4219; // some ID
            auto it = std::find_if(
            gradebook.begin(), gradebook.end(),
            [&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});


            In your case, as you the studentID seems to serve as a "unique key", I'd use data structure std::map<int, StrudentGradeInfo> instead.



            Overloading operator == is - as gsamars pointed out - somehow impractical, as it is meant for comparing two objects of the same type (and not an object with an int). See the following code illustrating this:



            struct StudentGradeInfo {
            std::string studentName;
            int studentID;

            bool operator==(const StudentGradeInfo& c) const {
            return c.studentID == studentID;
            }
            };

            int main() {

            std::vector<StudentGradeInfo> gradebook {
            { "john", 123 },
            { "max", 345 }
            };

            StudentGradeInfo aNewOne { "sepp", 345 };
            auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
            if (it == gradebook.end()) {
            cout << "345 does not exist" << endl;
            } else {
            cout << "345 already exists" << endl;
            }

            }





            share|improve this answer























            • Exactly what I thought! Wondering why the OP said he needs an operator overloading...
              – gsamaras
              Nov 10 at 22:36










            • I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
              – throwthedays
              Nov 10 at 22:38








            • 1




              That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
              – gsamaras
              Nov 10 at 22:40















            up vote
            0
            down vote













            I suppose you want to loop through the vector to find a studentGrandeInfo-object with a particular ID. You can accomplish this rather easy by using std::find_if together with a lambda-function for the proper comparison. The code could look as follows:



            int toFind = 4219; // some ID
            auto it = std::find_if(
            gradebook.begin(), gradebook.end(),
            [&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});


            In your case, as you the studentID seems to serve as a "unique key", I'd use data structure std::map<int, StrudentGradeInfo> instead.



            Overloading operator == is - as gsamars pointed out - somehow impractical, as it is meant for comparing two objects of the same type (and not an object with an int). See the following code illustrating this:



            struct StudentGradeInfo {
            std::string studentName;
            int studentID;

            bool operator==(const StudentGradeInfo& c) const {
            return c.studentID == studentID;
            }
            };

            int main() {

            std::vector<StudentGradeInfo> gradebook {
            { "john", 123 },
            { "max", 345 }
            };

            StudentGradeInfo aNewOne { "sepp", 345 };
            auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
            if (it == gradebook.end()) {
            cout << "345 does not exist" << endl;
            } else {
            cout << "345 already exists" << endl;
            }

            }





            share|improve this answer























            • Exactly what I thought! Wondering why the OP said he needs an operator overloading...
              – gsamaras
              Nov 10 at 22:36










            • I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
              – throwthedays
              Nov 10 at 22:38








            • 1




              That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
              – gsamaras
              Nov 10 at 22:40













            up vote
            0
            down vote










            up vote
            0
            down vote









            I suppose you want to loop through the vector to find a studentGrandeInfo-object with a particular ID. You can accomplish this rather easy by using std::find_if together with a lambda-function for the proper comparison. The code could look as follows:



            int toFind = 4219; // some ID
            auto it = std::find_if(
            gradebook.begin(), gradebook.end(),
            [&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});


            In your case, as you the studentID seems to serve as a "unique key", I'd use data structure std::map<int, StrudentGradeInfo> instead.



            Overloading operator == is - as gsamars pointed out - somehow impractical, as it is meant for comparing two objects of the same type (and not an object with an int). See the following code illustrating this:



            struct StudentGradeInfo {
            std::string studentName;
            int studentID;

            bool operator==(const StudentGradeInfo& c) const {
            return c.studentID == studentID;
            }
            };

            int main() {

            std::vector<StudentGradeInfo> gradebook {
            { "john", 123 },
            { "max", 345 }
            };

            StudentGradeInfo aNewOne { "sepp", 345 };
            auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
            if (it == gradebook.end()) {
            cout << "345 does not exist" << endl;
            } else {
            cout << "345 already exists" << endl;
            }

            }





            share|improve this answer














            I suppose you want to loop through the vector to find a studentGrandeInfo-object with a particular ID. You can accomplish this rather easy by using std::find_if together with a lambda-function for the proper comparison. The code could look as follows:



            int toFind = 4219; // some ID
            auto it = std::find_if(
            gradebook.begin(), gradebook.end(),
            [&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});


            In your case, as you the studentID seems to serve as a "unique key", I'd use data structure std::map<int, StrudentGradeInfo> instead.



            Overloading operator == is - as gsamars pointed out - somehow impractical, as it is meant for comparing two objects of the same type (and not an object with an int). See the following code illustrating this:



            struct StudentGradeInfo {
            std::string studentName;
            int studentID;

            bool operator==(const StudentGradeInfo& c) const {
            return c.studentID == studentID;
            }
            };

            int main() {

            std::vector<StudentGradeInfo> gradebook {
            { "john", 123 },
            { "max", 345 }
            };

            StudentGradeInfo aNewOne { "sepp", 345 };
            auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
            if (it == gradebook.end()) {
            cout << "345 does not exist" << endl;
            } else {
            cout << "345 already exists" << endl;
            }

            }






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 10 at 22:59

























            answered Nov 10 at 22:35









            Stephan Lechner

            24.6k21738




            24.6k21738












            • Exactly what I thought! Wondering why the OP said he needs an operator overloading...
              – gsamaras
              Nov 10 at 22:36










            • I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
              – throwthedays
              Nov 10 at 22:38








            • 1




              That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
              – gsamaras
              Nov 10 at 22:40


















            • Exactly what I thought! Wondering why the OP said he needs an operator overloading...
              – gsamaras
              Nov 10 at 22:36










            • I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
              – throwthedays
              Nov 10 at 22:38








            • 1




              That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
              – gsamaras
              Nov 10 at 22:40
















            Exactly what I thought! Wondering why the OP said he needs an operator overloading...
            – gsamaras
            Nov 10 at 22:36




            Exactly what I thought! Wondering why the OP said he needs an operator overloading...
            – gsamaras
            Nov 10 at 22:36












            I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
            – throwthedays
            Nov 10 at 22:38






            I wish I could use this solution @gsamaras , but the problem I am working on requires an overloaded operator ==. Thank you for the quick answer however.
            – throwthedays
            Nov 10 at 22:38






            1




            1




            That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
            – gsamaras
            Nov 10 at 22:40




            That means that you have to create another object of your class @throwthedays with the ID the user gave! Are you sure this is what you want? The operator== compares can compare two classes.
            – gsamaras
            Nov 10 at 22:40


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244020%2fhow-to-compare-a-variable-to-member-variables-of-objects-contained-in-a-vector%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            鏡平學校

            ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

            Why https connections are so slow when debugging (stepping over) in Java?