超载<在地图中使用struct作为键时未调用运算符?

时间:2014-03-10 13:07:50

标签: c++ map operator-overloading

我已经明白我们必须为<编写运算符重载函数。运算符当我们使用键作为结构时,因为地图使用严格的周序,它必须在插入映射之前进行比较。

希望我的理解是正确的,请阅读here

考虑以下代码段

  struct Node
    {
       int a;     

     };


    // This is not called

  bool operator< (const Node &p_node1,const Node &p_node2)
  {
       printf("\nCALLED OPERATOR OVERLOADING");
       return true;
  }

    int main()
    {
       using namespace std;        
       map<Node,int> my_map;        
       Node n1;
       n1.a=55;

       my_map[n1]=2; // operator overloading should be called

       return 0;
    }

问题是操作符重载函数没有被调用?

编辑:

从下面的答案中,在将另外一对添加到容器操作符之后调用。 但是为什么它被专门召唤三次,这里有什么比较呢?

3 个答案:

答案 0 :(得分:6)

当地图为空时,不需要调用比较器,因为没有什么可比较的。

答案 1 :(得分:2)

您正在空映射中插入唯一元素,因此永远不会调用比较运算符。尝试在my_map中使用多个元素。

答案 2 :(得分:0)

在地图中至少有2个元素可以调用比较运算符。

       Node n1;
       n1.a=55;

       my_map[n1]=2; // operator overloading should be called

       Node n2;
       n2.a=55;

       my_map[n2]=3;

见下面的修改示例代码。

http://ideone.com/iGY9Xa