设想
我在使用 STL 时遇到了一个减速带,这似乎是一个正常的场景,在这里简化:
class Person {
string Name;
int Age;
};
vector<Person> people;
AddPeople(people);
string s("Bob");
find(people.begin(), people.end(), s);
问题
不幸的是find
想比较整个班级。
问题
有没有更好或更合适的方法来做到这一点“STL 方式”?建议的问题没有帮助,但我设法找到了几个相关的 问题,但没有直接的解决方案。
变通方法/测试
有一些潜在的解决方法:
完全放弃
find
(杂乱无章,但可以重构):布尔 bBob = 假;for (UINT i = 0; i < people.size(); i++) { if (people[i].Name == s) bBob = true; 休息; }
提供转换运算符(隐式转换不起作用;显式不能用于
find
):类人{字符串名称;诠释年龄;运算符字符串() {返回名称;} };
人 b(“鲍勃”,99);字符串 s ("鲍勃"); b == s; //不起作用 string(b) == s; //有效,但对 find() 没有好处
定义一个独立的相等运算符(简单、有效但全局公开):
BOOL 运算符==(人 l, 字符串 r) { return l.Name == r; }
定义一个成员相等运算符(使比较顺序相关;对象必须是第一个):
类人{字符串名称;诠释年龄;bool operator==(string s) {return Name == s;} };
人 b(“鲍勃”,99);字符串 s ("鲍勃"); b==s; // 工作 s==b; //不起作用,但对于 find() 来说不是问题
看起来#4 是最好的候选人,但没有一个看起来很理想或感觉“STL”,而且有些有问题。