2009/01/08(Thu) 01:32:49 編集(投稿者)
>これを使って「simizuのチーム名」を探す方法をどなたかご教授ください。
やりたいことはこんな感じでしょうか?
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
typedef std::pair<std::string, std::string> Status;
typedef std::multimap<std::string, std::string> School;
class search_name
{
public:
const std::string& student_name_;
search_name(const std::string& name)
: student_name_(name) {}
bool operator()(const Status& s) const
{
return s.second == student_name_;
}
};
int main(int argc, char** argv)
{
School s;
s.insert(std::make_pair("Agumi", "tanaka"));
s.insert(std::make_pair("Agumi", "suzuki"));
s.insert(std::make_pair("Agumi", "kubota"));
s.insert(std::make_pair("Bgumi", "kaneda"));
s.insert(std::make_pair("Cgumi", "morita"));
s.insert(std::make_pair("Cgumi", "simizu"));
s.insert(std::make_pair("Cgumi", "kumagai"));
s.insert(std::make_pair("Cgumi", "yoshimura"));
std::string simizukun("simizu");
School::iterator it = s.begin();
School::iterator end = s.end();
while ( (it = std::find_if(it, end, search_name(simizukun))) != end )
{
std::cout << simizukun << "は" << it->first << "に所属しています。" << std::endl;
++it;
}
return 0;
}
> # ところで 清水君がたーくさんいたときどうすんです?
> # 最初の一人? 全員列挙? ほかのなにか?
ですね。清水君がAgumiに二人居たりさらにBgumiにも居たりすると、どうするんでしょう?
一応サンプルで書いたコードでは全清水君が表示されます。
# でもこれならmultimapである必要はないのでvectorで十分ですね
# Agumiの中から清水君を全員見つけたいとかならmultimapの方がよさそうです。
# この場合は
School::iterator it = s.begin();
School::iterator end = s.end();
を
School::iterator it = s.lower_bound("Agumi");
School::iterator end = s.upper_bound("Agumi");
に書き換えれば出来ます。