[操作疑難] unordered_set 點可以有兩種Compare behaviour?

  1. struct NodePoolKey {

  2.         NodePoolKey(int minX, int maxX, int minZ, int maxZ, long t) {
  3.                 this->minX = minX;
  4.                 this->minZ = minZ;
  5.                 this->maxX = maxX;
  6.                 this->maxZ = maxZ;
  7.                 this->t = t;
  8.         }

  9.         bool operator==(const NodePoolKey& other) const
  10.         {                 
  11.                 return (this->minX == other.minX) &&
  12.                         (this->minZ == other.minZ) &&
  13.                         (this->maxX == other.maxZ) &&
  14.                         (this->maxZ == other.maxZ) &&
  15.                         (this->t == other.t);
  16.         }
  17.          

  18.         bool overlaps(const NodePoolKey& a, const NodePoolKey& b) const {
  19.                 if (a.maxX < b.minX) return false; // a is left of b
  20.                 if (a.minX > b.maxX) return false; // a is right of b
  21.                 if (a.maxZ < b.minZ) return false; // a is above b
  22.                 if (a.minZ > b.maxZ) return false;

  23.                 TRACE("overlaps");
  24.                 return true;
  25.         }
  26.         int minX;
  27.         int maxX;
  28.         int minZ;
  29.         int maxZ;
  30.         long t;
  31. };
複製代碼
想compare equality
同range
  1. if(tbl.find(key) != tbl.end())
  2. {
  3.    // do equality checks
  4. }

  5. ///////


  6. if(tbl.find(key) != tbl.end())
  7. {
  8.    // do range checks
  9. }
複製代碼
THX