第81章 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;
}
では、実行結果を見てみましょう。

「田中」さんは3人登録されていますが、検索すると全部の「田中」さんの 電話番号が表示されていますね。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jul/13/2004 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。