所以我正在进行一项任务,我需要在一个向量中搜索一个包含4个变量的对象。 string,string,int,int。我对编程很陌生。如果我只使用第一个字符串进行搜索,我可以使用二进制搜索。但不确定如何使它匹配所有四个字段。
向量按第一个字符串排序,如果第一个字符串匹配则按第二个字符串排序,如果第二个字符串匹配则排序,但第一个是int等。
到目前为止,我的代码是
bool Room::searchRoom(string name, string initial, int number1, int number2) {
size_t mid, left = 0 ;
size_t right = testVector.size();
while (left < right) {
mid = left + (right - left)/2;
if (name > testVector[mid].getName()){
left = mid+1;
}
else if (name < testVector[mid].getName()){
right = mid;
}
else {
return true;
}
return false;
}
答案 0 :(得分:3)
您可以将operator<
添加到您的班级(或cmp
功能)
然后使用经典算法。
class A
{
public:
// Other stuff
bool operator < (const A& rhs) const {
if (field1 != rhs.field1) return field1 < rhs.field1;
if (field2 != rhs.field2) return field2 < rhs.field2;
if (field3 != rhs.field3) return field3 < rhs.field3;
return field4 < rhs.field4;
}
private:
std::string field1;
std::string field2;
int field3;
int field4;
};
答案 1 :(得分:2)
while (left < right) {
mid = left + (right - left)/2;
if (name > testVector[mid].getName()) {
left = mid+1;
}
else if (name < testVector[mid].getName()) {
right = mid;
}
else if (initial > testVector[mid].getInitial()) {
left = mid+1;
}
else if (initial < testVector[mid].getInitial()) {
right = mid;
}
... // third and fourth variables here
else {
return true;
}
}