mapを用いたデータ構造
Posted: 2017年12月16日(土) 18:20
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;
}