title: using std::set find with struct data
body: <pre><code>typedef struct Edge
  {
      int v1, v2, w;
      bool operator &lt;(const Edge &amp;rhs) const{
          bool b = v1 &lt; rhs.v1 || v2 &lt; rhs.v2;
          return (b);
      }
  } edge;
  
  
  template &lt;class T&gt;
  struct my_less
  {
      bool operator()(const T&amp; _Left, const T&amp; _Right) const
      {
          return (_Left &lt; _Right);
      }
  };
  
  int main(int argc, char *argv[])
  {
      set &lt;edge, my_less&lt;edge&gt; &gt; F;
  
      edge e3 = { 3, 3, 3};
      edge e4 = { 3, 7, 3};
      edge e5 = { 2, 7, 3};
  
      F.insert(e3);
      printf("e3 ? %d\n", F.find(e3)!=F.end()); // O
      printf("e4 ? %d\n", F.find(e4)!=F.end()); // O
      printf("e5 ? %d\n", F.find(e5)!=F.end()); // X
  
      //printf("%d\n", e3&lt;e4);
  
      return 0;
  }
  </code></pre>
  
  <pre>
  If run this code, I got an error at "F.find(e5)!=F.end()" with following message.
  "Debug Assertion Failed!. Expression: invalid operator &lt "
  
  The condition of two edges of '(x,y), (p,q)' equality is 
   &#33(x &lt p || y &lt q) && &#33(p &lt x || q &lt y)
  
  It can be '(x&gt=p && y&gt=q) && (p&gt=x && q&gt=y)'
  
  I really don't know why assertion raised.
  Is there something wrong?
  </pre>