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

            Guess what letter conforming each word

            Port of Spain

            Run scheduled task as local user group (not BUILTIN)