gpt4 book ai didi

c++ - 构造指针类型的 std::set 是否有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:44 25 4
gpt4 key购买 nike

我想将一些指针存储到 std::set 中,但标准指南说它是无效的。

If two pointers p and q of the same type point to different objects that are > not members of the same object or elements of the same array or to different > functions, or if only one of them is null, the results of pq, p<=q, and > p>=q are unspecified.

看起来 <, > 运算符不受朴素指针类型的支持,如下所示。

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

如何将指针放入 std::set 或 std::map 的键中?我是否应该定义一些支持比较的包装器

编辑 1

Some other questions假设即使 C++ 指针不直接支持 <、>,std::less 也可以很好地处理纯指针(没有任何额外信息)。但我找不到任何引用资料。

最佳答案

虽然内置运算符 < 确实如此仅适用于指向同一数组的指针,std::setstd::map不要使用该运算符 - 他们使用 std::less .反过来,这保证对所有指针施加总顺序:

[comparisons]/2 For templates less, greater, less_equal, and greater_equal, the specializations for any pointer type yield a strict total order that is consistent among those specializations and is also consistent with the partial order imposed by the built-in operators <, >, <=, >=.

关于c++ - 构造指针类型的 std::set 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com