c++ - 为指向类对象的指针重载 operator<

标签 c++ pointers stl operator-overloading

我正在尝试弄清楚如何为指向 Item 类对象的 Item Pointer 类实现 operator< 重载。它是存储指向 STL 集中项的指针的程序的一部分。重载对于有序的 STL 集(按标题的字母顺序)是必需的。我知道下面的 ItemPtr 重载代码是错误的。我以为我可以取消引用指针以获取实际项目,但我不知道如何实现它。我希望我走在正确的轨道上。我感谢任何人可以分享的任何指示(没有双关语意)。

bool operator<(const Item& i1, const Item& i2)
{
    const char* str1 = i1.getTitle().c_str();
    const char* str2 = i2.getTitle().c_str();
    return strcmp(str1, str2);
}

bool operator<(const ItemPtr& ip1, const ItemPtr& ip2)
{
    const Item& i1 = *ip1;
    const Item& i2 = *ip2;
    return i1 < i2;
}

谢谢。

最佳答案

最简单的方法,假设您保证 setgetTitle() 中没有无效指针是 const:

bool operator<(const ItemPtr& ip1, const ItemPtr& ip2)
{
  return ip1->getTitle() < ip2->getTitle();
}

不过,我要提醒您,需要做这种事情会触发我的感觉,即您的设计可能存在问题。特别是,为什么要在 set 中存储指向 Item 的指针,而不仅仅是 Item 本身?这真的需要吗?

关于c++ - 为指向类对象的指针重载 operator<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070526/

相关文章:

c++ - Qt C++ 与 'operator<<' 流不匹配

c - 双向链表: Incompatible pointer types

c++ - 使用反向迭代器从 vector 中快速删除

c++ - 使用 STL 克隆有哪些优势?

c++ - DLL 的 std::set_terminate 吗?

C++ 基类调用已删除或无法访问的函数

c - 为什么这些词不附加在 C 中?

使用索引信息的 C++partition_point

c++ - 在 CPU 上并行减少数组

c++ - 从指向字符串的指针获取一个字符