template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>> class unordered_multimap;
#include <unordered_map> using namespace std; unordered_multimap <Key, T> 変数名; unordered_multimap<int, string> x; // 空の unordered_map,昇順 unordered_multimap<int, string> x(it1, it2); // it1 から it2 の範囲で初期化 unordered_multimap<int, string> x(y); // unordered_map y で初期化 unordered_multimap<int, string> x ({{3, "abc"}, {2, "xyz"}, {2, "efg"}}); // 初期化子リスト unordered_multimap<int, string> x {{3, "abc"}, {2, "xyz"}, {2, "efg"}}; // 初期化子リスト unordered_multimap<int, string> x = {{3, "abc"}, {2, "xyz"}, {2, "efg"}}; // 初期化子リスト
unordered_multimap<int, string> mp {{1, "abc"}, {3, "efg"}, {1, "xyz"}}; mp.emplace(3, "xxx"); mp.emplace(make_pair(3, "yyy")); // mp.insert(2, "xyz"); // error mp.insert(make_pair(2, "xyz")); for (auto x : mp) cout << " (" << x.first << ", " << x.second << ")"; cout << endl;
= == !=
#include <iostream> #include <unordered_map> using namespace std; using itr = unordered_multimap<string, int>::iterator; void print(string str, unordered_multimap<string, int> &m) { if (m.empty()) cout << " コンテナ " << str << " は空です\n"; else { cout << str << " の要素数: " << m.size() << endl; for (auto x : m) cout << " " << x.first << " " << x.second; // unordered_multimap<string, int>::iterator it; // for (it = m.begin(); it != m.end(); it++) // cout << " " << (*it).first << " " << (*it).second; cout << endl; } } int main() { // 要素を追加,キーが string,値が int cout << "**初期設定**\n"; unordered_multimap<string, int> m1; m1.insert(pair<string, int>("suzuki", 40)); m1.insert(pair<string, int>("sato", 60)); m1.insert(pair<string, int>("suzuki", 70)); m1.insert(pair<string, int>("suzuki", 50)); m1.insert(pair<string, int>("kato", 90)); print("m1", m1); // 2 番目の要素の前に要素を追加 cout << "**2 番目の要素の前に要素を追加**\n"; unordered_multimap<string, int>::iterator it = m1.begin(); it++; m1.insert(it, pair<string, int>("naito", 20)); print("m1", m1); // 2 番目の要素,及び,要素 naito を削除 cout << "**2 番目の要素,及び,要素 tanaka を削除**\n"; it = m1.begin(); it++; m1.erase(it); m1.erase("kato"); print("m1", m1); // キー suzuki の値 cout << "**キー suzuki の値**\n"; it = m1.find("suzuki"); cout << " 値: " << it->second << endl; // 最初のデータ pair<itr, itr> x = m1.equal_range("suzuki"); for (it = x.first; it != x.second; it++) cout << " (" << (*it).first << ", " << (*it).second << ")"; cout << endl; // 演算子で比較 cout << "**比較**\n"; unordered_multimap<string, int> m2 = {{"naito", 20}, {"suzuki", 50}, {"suzuki", 70}, {"suzuki", 40}}; print("m2", m2); if (m1 == m2) cout << " 2 つのコンテナ内の要素はすべて等しい\n"; // 要素 suzuki を削除 m1.erase("suzuki"); print("m1", m1); // 交換 cout << "**交換**\n"; print("入れ替え前:m1", m1); print("入れ替え前:m2", m2); m1.swap(m2); print("m1", m1); print("m2", m2); // m1 のすべての要素を削除 cout << "**m1 のすべての要素を削除**\n"; m1.clear(); print("m1", m1); return 0; }
**初期設定** m1 の要素数: 5 kato 90 suzuki 50 suzuki 70 suzuki 40 sato 60 **2 番目の要素の前に要素を追加** m1 の要素数: 6 naito 20 sato 60 suzuki 50 suzuki 70 suzuki 40 kato 90 **2 番目の要素,及び,要素 tanaka を削除** m1 の要素数: 4 naito 20 suzuki 50 suzuki 70 suzuki 40 **キー suzuki の値** 値: 50 (suzuki, 50) (suzuki, 70) (suzuki, 40) **比較** m2 の要素数: 4 suzuki 40 suzuki 70 suzuki 50 naito 20 2 つのコンテナ内の要素はすべて等しい m1 の要素数: 1 naito 20 **交換** 入れ替え前:m1 の要素数: 1 naito 20 入れ替え前:m2 の要素数: 4 suzuki 40 suzuki 70 suzuki 50 naito 20 m1 の要素数: 4 suzuki 40 suzuki 70 suzuki 50 naito 20 m2 の要素数: 1 naito 20 **m1 のすべての要素を削除** コンテナ m1 は空です
菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |