C++ Lambda-Ausdrücke für std::sort und std::lower_bound/equal_range auf ein struct-element in einen sortierten Vektor von structs

Ich habe einen std::vector von diesem struct:

struct MS
{        
  double aT;
  double bT;
  double cT;
};

was will ich mit std::sort auf aswell als std::lower_bound/equal_range etc...

Ich muss in der Lage sein, zu Sortieren und schauen Sie sich auf eines der ersten beiden Elemente des struct. Also im moment habe ich dieses:

class MSaTLess 
{
public:
  bool operator() (const MS &lhs, const MS &rhs) const
  {
    return TLess(lhs.aT, rhs.aT);
  }
  bool operator() (const MS &lhs, const double d) const
  {
    return TLess(lhs.aT, d);
  }
  bool operator() (const double d, const MS &rhs) const
  {
    return TLess(d, rhs.aT);
  }
private:
  bool TLess(const double& d1, const double& d2) const
  {
    return d1 < d2;
  }
};


class MSbTLess 
{
public:
  bool operator() (const MS &lhs, const MS &rhs) const
  {
    return TLess(lhs.bT, rhs.bT);
  }
  bool operator() (const MS &lhs, const double d) const
  {
    return TLess(lhs.bT, d);
  }
  bool operator() (const double d, const MS &rhs) const
  {
    return TLess(d, rhs.bT);
  }
private:
  bool TLess(const double& d1, const double& d2) const
  {
    return d1 < d2;
  }
};

Dies ermöglicht es mir, rufen sowohl std::sort und std::lower_bound mit MSaTLess() zu Sortieren/lookup basierend auf den im element und mit MSbTLess() zu Sortieren/lookup auf der Grundlage der bT-element.

Ich würde gerne Weg von der funktoren und mit C++0x-Lambda-Ausdrücke statt. Für die Art ist relativ einfach, da die lambda wird, nehmen Sie zwei Objekte des Typs MS als Argumente.

Was für die lower_bound-und anderen binary-search-lookup-algorithmen obwohl? Sie müssen in der Lage sein zu nennen, ein Komparator (MS -, Doppel -) Argumente und auch die Rückseite, (Doppel -, MS), richtig? Wie kann ich am besten diese mit einem lambda-Ausdruck in einem Aufruf von lower_bound? Ich weiß, ich könnte erstellen Sie eine MS dummy-Objekt mit den erforderlichen Schlüssel-Wert gesucht wird und verwenden dann die gleiche lambda als mit std::sort, aber gibt es einen Weg, es zu tun, ohne Verwendung von dummy-Objekten?

InformationsquelleAutor Paul Caheny | 2010-11-24
Schreibe einen Kommentar