我想将一些指针存储到std :: set中,但标准指南说它无效.
如果相同类型的两个指针p和q指向不是同一对象的成员或同一数组的元素或不同的>函数的不同对象,或者如果其中只有一个为null,则pq,p的结果<= q,>> p> = q未指定.
似乎<,>运算符不受天真指针类型的支持,如下所示.
Object * a = new Object;
Object * b = new Object;
a == b; // valid
a < b; //invalid
Object * arr = new Object[10];
&arr[3] == &arr[4]; // valid
&arr[3] < &arr[4]; // valid
Run Code Online (Sandbox Code Playgroud)
如何将指针放入std :: set或std :: map的键中?我应该定义一些支持比较的包装器
编辑1
其他一些问题说即使<,>不是C++指针直接支持的,std :: less也可以用纯指针工作(没有任何额外的信息).但我找不到任何参考.
虽然这是事实,内置的操作<
只适用于指针到同一阵列,std::set
并且std::map
不使用该运营商-他们使用std::less
.反过来,这可以保证对所有指针施加总订单:
[比较]/2对于模板
less
,greater
,less_equal
,和greater_equal
,在特为任何指针类型收率严格总订单即那些特例中是一致的,并且还与由内置的运营商所施加的偏序一致<
,>
,<=
,>=
.