[問題] map不能用下標提取set??????
看c++ primer的文字檢索章節的時候 也順便寫了這支程式
不過遇到一個非常奇怪的問題:
map <string, set <line_no> > word_map; (line_no是個size_type 暫時看成unsigned)
假設map裡面資料都輸入了 也就是每一個string對應到一組set set裡面一堆number
接著如果是課本:
return word_map.find(qword)->second (qword是個string, 由使用者輸入)
可以compile
但如果我把那一行改換成:
return word_map[qword]
卻反而不能運作了
簡單來說 查map的話 反而不能用下標的方式取回value type為set的形式
只能用非常迂迴的方式,也就是用iterator 然後把value給取值回來
是我概念哪邊沒有想到嗎???
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.91.172
推
11/19 10:11, , 1F
11/19 10:11, 1F
→
11/19 10:13, , 2F
11/19 10:13, 2F
word_map declare不是const 他是自定義class內的private member class名TextQuery
主要問題就是下面這個compile不成 但如果那個return換成下面那個return 就可以
set <TextQuery::line_no> TextQuery:: run_query(const string &qword) const
{
if (word_map.find(qword) == word_map.end())
return std::set<line_no>();
return word_map[qword];
//return word_map.find(qword)->second;
}
compiler是icc 出來的訊息很繁雜... 類似這樣:
error: passing â€o> TextQuery:: run_query(const std::stringstd::allocator<
unsigned int>, std::allocator<long unsigned int> >, std::less<std::basic_string<char, std::char_traits<char>, stst
std::basic_string<char, std::char_traits<char>, std::allocator<char> >....(後
面太長了)
後來把map的value中的set改成vector也有一樣的問題...不知道是哪邊概念錯誤
※ 編輯: DreamLoser 來自: 111.249.91.172 (11/19 10:22)
→
11/19 10:30, , 3F
11/19 10:30, 3F
→
11/19 10:31, , 4F
11/19 10:31, 4F
→
11/19 10:34, , 5F
11/19 10:34, 5F
你好 感謝你的回答 我不太懂所謂的const method是什麼意思 不過我猜你的意思應該是
在呼叫word_map[qword]的時候 compiler會把這個判斷為"有可能為左值"之可能(
也就是word_map[qword] = 1讓他改變而非const) 因此compiler不給我過?
※ 編輯: DreamLoser 來自: 111.249.91.172 (11/19 10:51)
推
11/19 10:56, , 6F
11/19 10:56, 6F
→
11/19 10:57, , 7F
11/19 10:57, 7F
→
11/19 10:57, , 8F
11/19 10:57, 8F
→
11/19 10:58, , 9F
11/19 10:58, 9F
感謝 剛剛把function宣告成non-const type 果然可以過了
推
11/19 11:03, , 10F
11/19 11:03, 10F
→
11/19 11:05, , 11F
11/19 11:05, 11F
的確蠻危險的 因為iterator不是const 課本是把obj.find(qword)先宣告成
const_iterator 所以課本的是沒什麼問題 我只是貼上我自己的版本 所以iterator如果
未來程式沒注意這點 很可能會修改到它...
※ 編輯: DreamLoser 來自: 111.249.91.172 (11/19 11:10)
推
11/19 11:14, , 12F
11/19 11:14, 12F
→
11/19 11:14, , 13F
11/19 11:14, 13F
→
11/19 11:25, , 14F
11/19 11:25, 14F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章