set的问题

thewayhome 2007-04-27 02:20:02
有個struct S我重載了它的<和==方法
假設:
S s1;S s2;
有 s1 == s2;
set<S> Set;
Set.insert(s1);
Set.find(s2)!=Set.end();

但是如果我定義Set為set<S*>,
就有
Set.insert(&s1);
Set.find(&s2) ==Set.end();
怎样解決?
...全文
161 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
longshanks 2007-04-27
  • 打赏
  • 举报
回复
Set<S*>是S指针的set。那么插入&s1时,将通过比较s1的指针值,也就是s1的地址,而不是s1本身。不会调用S上的<。S的<的语义是进行Sd对象的值比较,不是指针比较。于是,只有用s1的地址去find,才能得到插入的s1。
为此,只能另行定义一个比较函数(或函数对象),作为set模板的第二个模板参数:
struct s_less
{
bool operator()(const S* s1, const S* s2) {
*s1<*s2;
}
};

set<S*, s_less> Set;
...

Meyes的《Effective STL》中关联容器一章对此有详细的解释。
taodm 2007-04-27
  • 打赏
  • 举报
回复
那你得起用set模板的第二个参数,使用自定义的比较函数

65,185

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧