關聯容器map,set
習題11.1
map是鍵-值對應,其可儲存兩個型別,而vector單單是乙個型別的儲存容器。
map通過關鍵字獲得值,而vector 通過迭代器或者下標引索獲得。
習題11.2
list:頻繁需要插入、刪除操作
vector:需求更多的隨機訪問操作
deque:在兩端插入刪除、但又都對隨機訪問有需要
map:需要鍵值對應(字典),需要鍵值轉換(如客戶端輸入字串,轉化為對型別一致對應物件的操作)
set:需求查詢。
習題11.3
#include
#include
#include
#include
using namespace std;
int main()
for (const auto& w : word_count)
cout << w.first << " occurs " << w.second <<
((w.second > 1) ? " times " : " time ") << endl;
system("pause");
return 0;
}習題11.4
#include
#include
#include
#include
using namespace std;
int main()
for (const auto& w : word_count)
cout << w.first << " occurs " << w.second <<
((w.second > 1) ? " times " : " time ") << endl;
system("pause");
return 0;
}習題11.5
map是鍵值對應,而set只包括關鍵字
習題11.6
set不存在重複元素,而list存在。
習題11.7
#include
#include
#include
#include
#include
using namespace std;
int main()
}for (const auto& w : word_count)
system("pause");
return 0;
}習題11.8
vector在新增每個元素時,使用find判斷是否已有。set可以不會新加入已有的關鍵值。
習題11.9
map>
習題11.10
可以定義,但是使用時,《是未定義的。
習題11.11
略習題11.12 11.13
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
);// vec.emplace_back(str, i); //!!! easiest way.
for (const auto& p : vec)
std::cout << p.first << ":" << p.second << std::endl;
system("pause");
return 0;
}至於為什麼emplace_back最簡單也最有效,可參考
它是直接在容器管理的記憶體空間內建構函式
練習11.14
略。將名和生日定義為string。放入pair。最終是map>
練習11.16
std::mapmap;
map[25] = "a";
std::map::iterator it = map.begin();
it->second = "b";
練習11.17
第二個非法, multiset沒有push_back
練習11.18
是沒有找到word_count到底是個啥。。。。
練習11.19
略練習11.20
#include
#include
#include
#include
using namespace std;
int main()
);if(!ret.frist) ++ret.frist.second;
}for (const auto& w : word_count)
cout << w.first << " occurs " << w.second <<
((w.second > 1) ? " times " : " time ") << endl;
system("pause");
return 0;
}練習11.21
操作類似
auto ret = word_count.insert();
++ret.frist.second;
練習11.22
元素std::pair>
返回型別 std::pair>
練習11.23
略。將下標操作,改為insert即可,在第一層迴圈auto ret = word_count.insert();
在第二層迴圈ret.frist.second.push_back()。
練習11.24
新增關鍵字為0的值為1 的pair
練習11.25
非法,v[0]不存在
練習11.27
對關鍵字計數使用count,find查詢關鍵字第一次出現的位置
練習11.28
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
}, } };
auto s1 = m.find("a");
auto s2 = m.lower_bound("c");
auto s3 = m.upper_bound("c");
auto s4 = m.equal_range("c");
system("pause");
return 0;
}練習11.29
upper_bound、lower_bound返回指向可以插入元素的迭代器
equal_range返回pair,其中的兩個迭代器都是指向可以插入元素的迭代器
練習11.30
返回第乙個匹配到的pair的frist元素
練習11.31
略,注意點:全部刪完,進入while(1),當find返回end的時候break,保證每乙個都能找到
練習11.33
#include
#include
#include
#include
#include
using std::string;
using std::ifstream;
std::mapbuildmap(ifstream& map_file)
const string& transform(const string& s, const std::map& m)
void word_transform(ifstream& map, ifstream& input)
}int main()
練習11.34
沒有該關鍵字,會直接建立
練習11.35
會直接插入,出現重複關鍵字
C Primer 答案 第十一章
11.1 map 關聯容器,存放key和value vector 順序容器,只存value 11.2 list 經常在任何位置刪除新增資料 vector 沒別的要求一般就用它 deque 棧 map 字典 set 數學集合 11.3 and 11,4 include include include ...
c primer 第十一章 使用類
一,操作符過載 1 函式過載 多型 名稱相同,特徵標 引數列表 不同的函式。完成相同的基本操作 2 操作符左側的對像是呼叫物件,操作符右側的作為引數被傳遞的物件 3 過載限制 1 過載後的操作符至少有乙個運算元是使用者定義的型別。防止使用者為標準型別過載操作符 2 使用操作符,不能違反操作符原來的句...
C Primer 第十一章 使用類筆記
以加法為例 函式名 time time operator const time time 乙個類類相加的過載運算子 呼叫時 sum a b 如果a b都是time類,則等價於sum a.operator b 過載限制 1.過載後的運算子至少有乙個運算元是使用者定義的型別。2.不能建立新運算子 3.過...