我有类CPerson,简单的看起来像这样:
CPerson
{
public:
CPerson();
pair<string, string> CP_surname_name;
vector<CCar> CP_CarList;
};
然后我有vector<CPerson> CR_people
它是按CP_surname_name对排序的向量。
问题是,当我需要比较姓氏和姓名时,首先由用户输入我去传播,如果已经有我正在寻找的人。
auto it = lower_bound(CR_people.begin(), CR_people.end(), surname_name);
我有覆盖运算符&lt;所以排序很好。 但是当我需要检查时,如果surname_name与CP_surname_name完全相同:
if(surname_name == (*it).CP_surname_name){...}
它给了我false
即使它们是相同的。
我已经尝试过了:
if(surname_name.first == (*it).CP_surname_name.first && surname_name.second == (*it).CP_surname_name.second){...}
它的工作方式相同。
我也试过strcmp()
但它给了我错误,因为我使用的是字符串,而不是char *所以我尝试追加.c_str()
来重新输入它,这也给了我错误的结果。 String类中的compare()也不起作用。
谢谢你的帮助,对不起我的英语不好。
代码部分:
bool CRegister::AddCar( const string & rz, const string & name, const string & surname )
{
pair<string, string> SurName = make_pair(surname, name);
CCar newCar = CCar(rz, SurName);
if(CR_people.size() == 0 && CR_cars.size() == 0)
{
CR_people.push_back(CPerson(name,surname,rz));
CR_cars.push_back(newCar);
return true;
}
else if(CR_people.size() != 0 && CR_cars.size() != 0)
{
auto it = lower_bound(CR_cars.begin(), CR_cars.end(), rz);
if( it < CR_cars.end() && (*it).CC_rz.c_str() == rz.c_str()){return false;}
CR_cars.insert(it, newCar);
auto it2 = lower_bound(CR_people.begin(), CR_people.end(), SurName);
if( (*it2).CP_SnNm.first.c_str() == SurName.first.c_str() && (*it2).CP_SnNm.second.c_str() == SurName.second.c_str())
{
cout << "Cannot get here" << endl;
if((*it2).CPAddCar(rz))
return true;
return false;
}
else
{
CR_people.insert(it2, CPerson(name, surname, rz));
return true;
}
throw "Error, Add Car to register";
return false;
}
return false;
}
代码的含义是,当我已经在我的列表中有人时,我只是将CCar添加到汽车的CPersons列表中,并且当没有人等于参数时,我在其列表中添加带有CCar的CPerson。