 multimapはキーが重複してもかまいませんでした。これを利用して、姓と電話番号の組を入力して姓で電話番号を検索するプログラムを作ってみましょう。たとえば、田中さんが複数登録されているとします。「田中」で検索すると、すべての田中さんの電話番号を表示する、というものです。
multimapはキーが重複してもかまいませんでした。これを利用して、姓と電話番号の組を入力して姓で電話番号を検索するプログラムを作ってみましょう。たとえば、田中さんが複数登録されているとします。「田中」で検索すると、すべての田中さんの電話番号を表示する、というものです。
姓と電話の登録はすでに知っている知識でできますね。
キーから、検索するにはfindメソッドを使います。そうするとキーに一致する反復子を返します。
存在しなければ最後の反復子を返します。
countメソッドは、キーに一致するキーの数を返します。size_type型を返すので、int型等にキャストしておくと便利です。
では、サンプルのプログラムを見てみましょう。
// multimap03.cpp
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
    string name, tel;
    multimap<string, string>mp;
    pair<string, string>p;
    int count, i;
    while (1) {
        cout << "名前(0:終了)-- ";
        cin >> name;
        if (name == "0")
            break;
        cout << "電話-- ";
        cin >> tel;
        p.first = name;
        p.second = tel;
        mp.insert(p);
    }
    multimap<string, string>::iterator itr;
    while (1) {
        cout << "検索する名前(0:終了)-- ";
        cin >> name;
        if (name == "0")
            break;
        count = (int)mp.count(name);
        if (count == 0) {
            cout << "一致するものがありません" << endl;
            continue;
        }
        itr = mp.find(name);
        for (i = 0; i < count; i++) {
            cout << itr->first << "---" << itr->second << endl;
            itr++;
        }
    }
    return 0;
}
では、実行結果を見てみましょう。

Update Jul/13/2004 By Y.Kumei