对于构造指针类型的 std::set 是有效的
Is is valid to construct std::set of pointer type?
我想在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
如何将指针放入 std::set 或 std::map 的键中?我应该定义一些支持比较的包装器
编辑 1
其他一些问题说,即使<,>不被C++指针直接支持,std::less 与纯指针一起工作(没有任何额外的信息)。但我找不到任何参考。
虽然内置运算符确实<
仅适用于同一数组中的指针,但std::set
和std::map
不使用该运算符 - 它们使用 std::less
.反过来,这保证对所有指针施加总顺序:
[比较]/2 对于模板
less
、greater
、less_equal
和greater_equal
,任何指针类型的专用化都会产生一个严格的总顺序,这些专用化在这些专用化之间是一致的,并且也与内置运算符<
、>
、<=
、>=
强加的偏序一致。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- 为什么我无法更改"set<set>"循环中的值<int>
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 对于set上的循环-获取next元素迭代器
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 对于构造指针类型的 std::set 是有效的
- STD :: SET的有效比较功能
- C++ std::map 或 std::set - 有效地插入重复项
- 使用一系列数字有效地初始化 std::set
- 在std::set/std::map中存储具有多个不同类型字段的c++对象的有效方法
- 获取std::set子集的有效方法
- 在 c++ 中有效使用 std::map 和 std::set