我已经明白我们必须为<编写运算符重载函数。运算符当我们使用键作为结构时,因为地图使用严格的周序,它必须在插入映射之前进行比较。
希望我的理解是正确的,请阅读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;
}
问题是操作符重载函数没有被调用?
编辑:
从下面的答案中,在将另外一对添加到容器操作符之后调用。 但是为什么它被专门召唤三次,这里有什么比较呢?
答案 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;
见下面的修改示例代码。