【问题标题】:Ordered associative containers of pointers [duplicate]指针的有序关联容器[重复]
【发布时间】:2015-08-30 23:14:42
【问题描述】:

定义有序的指针关联容器(内置的或类类型的)是否可行,尽管事实上,据我从标准中可以看出,关系运算符(非数组对象等) .) 指针未定义?

从 c++11 标准的 5.9 开始:

  1. 如果相同类型的两个指针 p 和 q 指向不同的对象,这些对象不是同一对象的成员或同一数组的元素或指向不同的函数,或者如果其中只有一个为空,则 @987654321 的结果@、p>qp<=qp>=q 未指定。

由于有序容器(map、set、multimap 和 multiset)默认使用< 运算符来提供总顺序,它可以很好地编译以创建一组指针。再说一次,如果指针的关系运算符确实未指定,那么p<qp>q 都可能测试falsetrue,这意味着这对于set 的排序可能不是一个好主意。如果不是因为我的书中(C++ Primer 第 5 版第 13.4 章)中的一个示例为类类型 Folder* 定义了一组指针,我可能会接受这是一个坏主意,即 @987654332 @似乎对我的担忧没有任何评论。

【问题讨论】:

    标签: c++ pointers containers associative


    【解决方案1】:

    有序的关联容器不直接使用operator<,它们使用std::less,它定义明确并建立了指针类型的总排序,即使operator< 不是。

    所以,可以用指针类型作为键来实例化std::setstd::map

    【讨论】:

      【解决方案2】:

      "是的,因为它使用 std::less,即使

      引用来源:Are pointers allowed as keys in ordered STL containers?

      此外,此问题与该问题重复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多