[问题] 请问std::map::find

楼主: Keitaro (动き出す时间...)   2014-12-31 02:30:58
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC2008
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
MFC
问题(Question):
请问std::map以struct当key时,该如何写"operator<"
使得使用map::find可以正确回传要找的key的iterator?
程式码(Code):(请善用置底文网页, 记得排版)
http://ideone.com/hE1bEh
补充说明(Supplement):
不好意思,小弟又上来请教一下各位先进。
以上面的范例为例,假设我自己定义一个SiteInfo struct,
想要以它为key,放入std::map里面。
当我使用std::map::find的时候,VC2008跟我说缺少"operator<"没做。
我找版上的文章看到之前有类似的问题(6447篇),
但是我定义的struct中跟之前的范例有所不同:
1. 6447篇的版友定义的struct里面都是int,而我有两个CString
2. SiteInfo这个struct被我用来辨认是否为同一只camera,
其中SiteID跟MAC必须相同,SiteName可以不同。
问题来了
1. 我不知道CString MAC该如何比大小?
2. SiteName我不需要用来比较是否为同一只,但是不写在operator<里面好像不行?
上面的网址的程式马是我从我的project撷取出来的。
我用VC2008这样写可以过,但是执行时
1. debug版,insert第二个时会直接跳出警告视窗,告诉我operator<出问题
2. release版,可以insert,但是在find的地方找出来的iterator是错的
请教版上各位先进该怎么解决呢?
感激不尽。
作者: CaptainH (Cannon)   2014-12-31 03:06:00
你的写法有可能使得a<b和b<a同时成立应先检查id,相异时比较id即可,相同时才检查第二条件
楼主: Keitaro (动き出す时间...)   2013-01-02 06:33:00
测试后OK 感谢您的帮忙!

Links booklink

Contact Us: admin [ a t ] ucptt.com