mapを用いたデータ構造

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
template

mapを用いたデータ構造

#1

投稿記事 by template » 7年前

solのmapを用いてデータの検索を行いたいのですが、データの出力を仕方がよくわかりません。
申し訳ないのですが、データの要素の出力の仕方をご教授願います。

コード:

#include <iostream>
#include <map>
#include <string>
 
class Entry {
    public:
        std::string name;
        std::string phone;
        Entry (const std::string& nm="", const std::string& ph="") {
            name = nm;
            phone = ph;
        }
};
 
 
std::ostream& operator<< (std::ostream& os, const Entry& e) {
    os << e.name << ": " << e.phone;
    return os;
}
 
 
int main (void)
{
    Entry e(10);
    std::map<std::string, std::string> data;
    
    int n = 0;
    int number;
    
    e[n++] = Entry ("Kwansei Gakuin University (PR)", "0798-54-6017");
    data [e[n].name]=  "0798-54-6017";
    std::cerr << data[e[n].name] << "***" << n << std::end; 
    e[n++] = Entry ("Kwansei Gakuin University (KSC)", "079-565-7600");
    data [e[n].name] = "079-565-7600";
    std::cerr << data[e[n].name] << "***" << n << std::endl;
    e[n++] = Entry ("Kobe University", "078-881-1212");
    data [e[n].name] = "078-881-1212";
    std::cerr << data[e[n].name] << "***" << n << std::endl;
    e[n++] = Entry ("Sanda Woodytown SATY", "079-564-8800");
    data [e[n].name] = "079-564-8800";
    std::cerr << data[e[n].name] << "***" << n << std::endl;
    e[n++] = Entry ("Sanda Hotel", "079-564-1010");
    data [e[n].name] = "079-564-1010";
    std::cerr << data[e[n].name] << "***" << n << std::endl;
    
 
 
    for (int i=0; i<n; i++) {
        number = e[i].phone.find ("-") + 1;
        e[i].phone.replace ( 0, e[i].phone.length(), e[i].phone.substr (number) );
        
    }
    std::cout << std::endl;
    std::cout << "検索用文字列を入力して下さい: ";
    std::string s;
    std::cin >> s;
//----------------------------------------------
// name に s を含むデータを全て表示せよ
//----------------------------------------------

    std::map<std::string, std::string>::iterator p;
    for (p=data.begin(); p!=data.end(); p++) {
        if ( data.find(s) != data.end() ) {
            std::cout << p->second << std::endl;
        }
    }
    /* 以下の文と同じにしたい */
    for (int i=0; i<n; i++) {
        if ( e[i].name.find(s) != e[i].name.npos ) {
	    std::cout << e[i] << std::endl;
        }
    }
    
    
    return 0;
}

template

Re: mapを用いたデータ構造

#2

投稿記事 by template » 7年前

以下のようにして解決

コード:

for (int i=0; i<n; i++) {
		if ( e[i].name.find(s) != e[i].name.npos ) {
			std::cout << data[e[i].name] << std::endl;
		}
	}

返信

“C言語何でも質問掲示板” へ戻る