是否可以练习定义指针的有序关联容器(内置类型或类型类型)尽管事实上,据我所知,关系运算符(非数组对象等) 。)指针未定义?
从c ++ 11标准的5.9开始:
- 如果同一类型的两个指针p和q指向不是同一个对象或同一个数组的元素或不同函数的成员的不同对象,或者只有其中一个为null,则{{{{ 1}},
醇>p<q
,p>q
和p<=q
未指定。
由于有序容器(map,set,multimap和multiset)默认使用p>=q
运算符来提供总订单,因此可以很好地编译以创建一组指针。然后,如果指针的关系运算符确实未指定,那么<
和p<q
可能都会测试p>q
或false
,这意味着对于排序可能不是一个好主意一个true
。如果不是因为我的书中的一个例子(C ++ Primer 5th ed chapter 13.4)为类类型set
定义了一组指针,即我认为这是一个坏主意。 Folder*
似乎没有对我的担忧发表评论。
答案 0 :(得分:2)
有序关联容器不直接使用<button id="click" type="button">CLICK ME</button>
<p>
You got: <span id="result"></span>
</p>
,它们使用std::less
,这是明确定义的,并建立指针类型的总排序,即使operator<
不是。< / p>
因此,可以使用指针类型作为键来实例化operator<
或std::set
。
答案 1 :(得分:1)
“是的,因为它使用std :: less,即使&lt;没有,也需要导致总订单。(&lt;将允许将不同序列中的不同指针视为相等,这将导致如果你插入来自不同序列的指针,那么在map等的奇怪行为中。)“ -etarion
引用来源:Are pointers allowed as keys in ordered STL containers?
此外,这个问题与该问题重复。