[問題] 請問std::map::find

看板C_and_CPP作者 (動き出す時間...)時間11年前 (2014/12/31 02:31), 11年前編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
開發平台(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是錯的 請教版上各位先進該怎麼解決呢? 感激不盡。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.209.129 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1419964261.A.BBF.html ※ 編輯: Keitaro (114.43.209.129), 12/31/2014 02:32:44

12/31 03:06, , 1F
你的寫法有可能使得a<b和b<a同時成立
12/31 03:06, 1F

12/31 03:08, , 2F
應先檢查id,相異時比較id即可,相同時才檢查第二條件
12/31 03:08, 2F

01/02 06:33, , 3F
測試後OK 感謝您的幫忙!
01/02 06:33, 3F
文章代碼(AID): #1Kekzbk_ (C_and_CPP)