Re: [STL ] set與map的key type使用自訂class 發生 …
※ 引述《lance0705 (藍‧聲‧口‧琴)》之銘言:
: 問題如下:
: 今天我有一個自訂類別想把它存在set中
: 譬如:set<A> SetOfA;
: 但是我又希望在裝入set之後還可以改變A的值
: 因此以SetOfA的iterator呼叫了A的non-constant member function
: 在VC++編譯可過
: 但在g++或icc都不行
: 後來才發現在標準的語法中 做為key type的物件必須為constant object
: 想請問除了把整個code重寫orz
: 有沒有別的辦法讓他在icc或g++中編譯過(或是小幅度的修改就好)
: 以上 懇請板上高手回答
Visual C++ Team Blog 昨天也有提到這個問題
請看問題三:http://0rz.tw/TNBKr
在C++98/03 中,使用者是可以任意更改元素的值,只要不要改變元素順序
但在C++0x,明確的限制了這件事
"Keys in an associative container are immutable" (N2857 23.2.4/5) and "For
[set and multiset], both iterator and const_iterator are
constant iterators"
他提出了四種解法
1 改用 map/multimap,分離key 和value
2 刪掉改一改再塞一個新的進去
3 改用 set/multiset<shared_ptr<T>, comparator>,多一層轉換
4 上一篇推文中提到的 mutable (作者這說很怪 weird),
const_cast (作者說這很邪惡 evil)
雖然 C++0x 都快變成C++1x了,還是要尊重一下...:P
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.160.118
※ 編輯: freelancer 來自: 59.124.160.118 (05/26 19:27)
→
05/26 23:39, , 1F
05/26 23:39, 1F
→
05/26 23:40, , 2F
05/26 23:40, 2F
→
05/26 23:41, , 3F
05/26 23:41, 3F
推
05/27 08:20, , 4F
05/27 08:20, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):