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.
c++ operator-overloading
add a comment |
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.
c++ operator-overloading
You want to look up theStudentGradeInfo
-object with a particularstudentID
within the vector, right?
– Stephan Lechner
Nov 10 at 22:27
@StephanLechner yeah I think. I want to make sure that the user inputID
is not the same as anystudentID
s in the vector already
– throwthedays
Nov 10 at 22:35
add a comment |
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.
c++ operator-overloading
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
c++ operator-overloading
asked Nov 10 at 22:24
throwthedays
307
307
You want to look up theStudentGradeInfo
-object with a particularstudentID
within the vector, right?
– Stephan Lechner
Nov 10 at 22:27
@StephanLechner yeah I think. I want to make sure that the user inputID
is not the same as anystudentID
s in the vector already
– throwthedays
Nov 10 at 22:35
add a comment |
You want to look up theStudentGradeInfo
-object with a particularstudentID
within the vector, right?
– Stephan Lechner
Nov 10 at 22:27
@StephanLechner yeah I think. I want to make sure that the user inputID
is not the same as anystudentID
s 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 studentID
s 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 studentID
s in the vector already– throwthedays
Nov 10 at 22:35
add a comment |
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) {
//...
}
}
add a comment |
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;
}
}
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? Theoperator==
compares can compare two classes.
– gsamaras
Nov 10 at 22:40
add a comment |
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) {
//...
}
}
add a comment |
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) {
//...
}
}
add a comment |
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) {
//...
}
}
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) {
//...
}
}
answered Nov 10 at 22:47
Ted Lyngmo
969112
969112
add a comment |
add a comment |
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;
}
}
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? Theoperator==
compares can compare two classes.
– gsamaras
Nov 10 at 22:40
add a comment |
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;
}
}
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? Theoperator==
compares can compare two classes.
– gsamaras
Nov 10 at 22:40
add a comment |
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;
}
}
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;
}
}
edited Nov 10 at 22:59
answered Nov 10 at 22:35
Stephan Lechner
24.5k21738
24.5k21738
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? Theoperator==
compares can compare two classes.
– gsamaras
Nov 10 at 22:40
add a comment |
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? Theoperator==
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
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
You want to look up the
StudentGradeInfo
-object with a particularstudentID
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 anystudentID
s in the vector already– throwthedays
Nov 10 at 22:35