0

所以我正在做一个作业,我需要在一个向量中搜索一个包含 4 个变量的对象。字符串,字符串,整数,整数。我对编程很陌生。如果我只使用第一个字符串进行搜索,我就可以让二进制 serach 工作。但不确定如何使其匹配所有四个字段。

向量按第一个字符串排序,如果第一个字符串匹配则按第二个字符串排序,如果第二个字符串匹配则排序但第一个 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;
    }
}
4

2 回答 2

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;
};
于 2013-10-01T11:46:15.793 回答
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;
  }
}
于 2013-10-01T11:38:33.720 回答